2009-07-06 3 views
7

Начал изучать некоторые сценарии оболочки. У меня есть скрипт perl, который работает в одном файле. Как я могу написать сценарий оболочки для запуска скрипта perl кучу раз во всех файлах с ключевым словом «filename» в нем?Запуск сценария по нескольким файлам в unix

Так на английском языке,

for /filename/ in filenames 
    perl myscript.pl completefilename 

Спасибо.

ответ

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

В Баш:

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

Это работает только в том случае, если в них нет файлов с пробелами. – hillu

0

FILES = "ключевое слово"

для е в "$ FILES" сделать Perl myscript.pl $ е сделано

От http://www.cyberciti.biz/faq/bash-loop-over-file/

+0

Но $ f подтягивает ключевое слово, тогда как я хотел бы получить полное имя файла (включая ключевое слово). – Dirk

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

редактировать: спасся звезды, не хотел разметку здесь

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

обратную косую черту перед командой «LS» является временно отключить псевдонимы.

НТН

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

Лично я использую ЗШ оболочку, которая дает вам очень хороший способ для запуска команды рекурсивно на множестве подкаталогов. Он также позволяет вам изменить суффикс файла, который ручно при использовании хромого для создания файлов MP3 .wav-файлов:

для i in **/*. Wav; lame $ i $ i: r.mp3

Вы также можете передать вывод одной команды другой, что я часто использую, когда я загружаю несколько файлов битов и хочу видеть процент, который каждая загрузка завершено:

для i in **/*. txt; grep -H percent $ i | tail -1

Смежные вопросы