2009-07-06 62 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