在unix中的多个文件上运行脚本

时间:2009-07-06 16:10:25

标签: unix shell

开始学习一些shell脚本。我有一个在一个文件上运行的perl脚本。我如何编写一个shell脚本来对所有带有关键字“filename”的文件运行perl脚本?

所以用英语,

for /filename/ in filenames  
    perl myscript.pl completefilename

感谢。

8 个答案:

答案 0 :(得分:11)

find . -name "filename*" -exec perl myscript.pl '{}' \; 

答案 1 :(得分:4)

find . -path "\*filename\*" -exec perl myscript.pl {} \;

编辑:转载星标,不想在这里加标

答案 2 :(得分:4)

for i in $(\ls -d filenames)
do
    perl myscript.pl $i
done

'ls'命令前面的反斜杠是暂时禁用任何别名。

HTH

答案 3 :(得分:2)

如果文件名中有空格,请使用旧备用

find . -maxdepth 1 -print0 | xargs -0 perl myscript.pl

答案 4 :(得分:1)

在bash中:

files=`ls -1 *`
for $file in $files;
do
    perl myscript.pl $file;
done

答案 5 :(得分:1)

一个班轮:

$ for file in filename1 filename2 filename3; do perl myscript $file; done

您可以使用通配符代替以空格分隔的文件名列表,例如:

$ for file in *.txt *.csv; do perl myscript $file; done

答案 6 :(得分:0)

FILES = “关键字

对于“$ FILES”中的f 做   perl myscript.pl $ f 完成

来自http://www.cyberciti.biz/faq/bash-loop-over-file/

答案 7 :(得分:0)

我个人使用zsh shell,它为您提供了一种在一组子目录上递归运行命令的非常好的方法。它还允许您更改文件的后缀,这在使用lame创建.wav文件的MP3文件时很方便:

for i in ** / * .wav;跛脚$ i $ i:r.mp3

你也可以将一个命令的输出传递到另一个命令,这是我在下载一些bittorrent文件时经常使用的东西,并希望看到每个下载完成的百分比:

表示** / * .txt; grep -H%$ i |尾巴-1