1

У меня есть каталог, где несколько файлов. a1 , bb2 , ccc3

На данный момент я вручную делаю:

perl myperscitpt.pl a1 a1.txt
perl myperscitpt.pl bb2 bb2.txt
perl myperscitpt.pl ccc3 ccc3.txt

Как я могу сделать это с помощью сценария оболочки Linux?

3 ответа3

2
for i in *; do perl myperlscript $i ${i%.*}.txt; done 

Конечно, он использует регулярные выражения.

2

вам нужно будет искать петли. Это руководство превосходно: http://www.tldp.org/LDP/abs/html/abs-guide.html#EX22

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

for fn in *;
do
    # do something with the file names and files
    # make the output filename
    ofn=${fn}.txt
    # run the perl thingy
    perl myperscitpt.pl $fn $ofn
done
1
find /home/user/my/folder -type f -exec perl myperscitpt.pl "{}" "{}.txt" \;

Эта команда найдет все файлы в каталоге (и подкаталоге) и выполнит ваш Perl-скрипт.

find /home/user/my/folder -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;

Вы можете заменить /home/user/my/folder точкой . если вы хотите найти в текущей папке.

{} - это путь к имени файла (и имени файла).

\; требуется при использовании -exec в конце команды

-type f означает поиск файлов (не каталогов)

-iname "a*" -or -iname "b*" -or -iname "c*" означает поиск файлов, которые начинаются с a или b или c. -iname нечувствителен к регистру, -name чувствителен к регистру.

Эта команда также будет искать в подкаталогах . Если вы не хотите искать в подкаталогах, вы устанавливаете -maxdepth (используйте его в качестве первого аргумента в вашей команде поиска):

find /home/user/my/folder -maxdepth 1 -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;

find - мощная команда с большим количеством опций, см. руководство: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Finding-Files

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .