2017-07-07 77 views
0

我有一個文件夾,如.txt,.update,.text。文件名是一樣bash腳本一次處理多個文件

out1.txt, out1.text, out1.update,

out2.txt, out2.text, out2.update

等等... 。我的命令是這樣的:

./script.pl out1.txt out1.text out1.update 

我想在迴路的每個文件把這個命令。我曾嘗試使用像一個循環:

for i in *.{txt,text,update} 

但是這需要全名,包括擴展名,所以我無法弄清楚如何演繹在命令中的特定擴展名的文件。

謝謝!

+0

可能重複的[在Bash中提取文件名和擴展名](https://stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash) – Joe

+0

我檢查了它,但它是不同的。 – AsmaTahir

回答

0

你可以使用:

for f in *.txt; 
do 
    b=${f%.txt} # the trick is there 
    ./script.pl $b.txt $b.text $b.update 
done 
+0

它給出了一個錯誤,「b」命令沒有找到。我已經通過了多次測試,但它給出了一個錯誤。 – AsmaTahir

+0

它工作。我在變量「b」和等號「=」之間有空格。我刪除它,然後它完美地工作。謝謝! – AsmaTahir

+0

@AsmaTahir的確,bash對「=」之前和之後的空間是敏感的;我確定了我的答案。 – Setop

0
ext=$(awk -F\. '{ print "."$NF }' <<< $i) 
fil=$(basename -s $ext $i) 

使用awk來提取擴展(使用第二個分隔的數據塊「」) 使用基本名稱與擴展到-s得到的文件名不帶擴展名

相關問題