多个文件的Bash循环

时间:2014-02-02 20:13:47

标签: bash unix

我有两千套文件,一套有name.ext,另一套用同名name.new.psl。因此,对于每个name.ext,都有一个name.new.psl。现在我必须将此作为参数传递给诸如customise.pl name.ext name.new.psl

之类的脚本

关于bash循环的任何想法?第一个名称对于每个name.extname.new.psl都很常见,如:

perl customise.pl name.ext name.new.psl

3 个答案:

答案 0 :(得分:4)

for f in *.ext ; do
    perl customise.pl "${f}" "${f/%.txt/.new.psl}"
done

将在当前工作目录中为您完成。

答案 1 :(得分:2)

for fname in *.ext
do
    perl customise.pl "$fname" "${fname%.ext}.new.psl"
done

以上不需要任何特殊的bash功能。因此,它与例如dash兼容,它是debian派生的发行版的默认shell(/bin/sh)。

上面的诀窍是${fname%.ext}告诉shell从.ext的末尾删除文本$fname,只留下“名称”部分。因此,"${fname%.ext}.new.psl"删除.ext会添加.new.psl扩展名。

上面代码中的文件名是双引号。这样即使文件名中包含空格,该脚本也能正常工作。

答案 2 :(得分:-1)

for i in `ls *.ext`; do NAME=`echo $i | awk -F '.' '{print $1}'`; perl customise.pl $NAME.ext $NAME.new.psl; done