2009-07-06 61 views
7

开始学习一些shell脚本。我有一个perl脚本在一个文件上运行。我将如何编写一个shell脚本来在其中包含关键字“filename”的所有文件上多次运行perl脚本?在unix中的多个文件上运行脚本

英语

所以,

for /filename/ in filenames 
    perl myscript.pl completefilename 

感谢。

回答

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

在bash:

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

只有在文件名中没有空格的情况下,它才有效。 – hillu 2009-07-06 16:39:23

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

编辑:逃星,不想在这里

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

标记的“ls”的命令之前的反斜杠是暂时禁用任何别名。

HTH

1

一个内胆:

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

相反,文件名,你还可以使用通配符的空间分隔的列表,例如:

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

2

如果你在你的文件名中有空格,使用旧的待机

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

我个人使用zsh的外壳,它给你一个很好的方式对一组子目录的递归运行命令。它还允许您更改文件,用蹩脚的创造.wav文件MP3文件时,这是handly的后缀:在

为我**/* WAV;跛脚$我$我:r.mp3

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

在**/* TXT

了我。 grep -H%$ i | tail -1