2017-07-07 113 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得到的文件名不带扩展名