У меня есть сценарий, который работает так для одного файл.
./script 0001g.log > output
для двух или более файлов, как этот
./script 0001g.log 0002g.log 0003g.log > output
Сценарий берет одно специальное число из каждого входного файла и помещает его в один выходной файл.
У меня есть 1000 входных файлов, как мне сделать цикл для выполнения моего скрипта.
У вас есть несколько возможных решений:
Просто
$ ./script *g.log >output
... и надеюсь, что * g.log
не t расширить до того, что делает командную строку слишком длинной. Это не очень надежно.
Если ваш сценарий не зависит от количества переданных ему файлов, то есть, если вывод можно просто добавить к выводу
для каждого входного файла, то это другое решение:
$ find ./ -type f -name "*g.log" | xargs ./script >output
A Третье решение - переместить цикл в сам сценарий:
for f in *g.log; do
# old code using "$f" as file name
done
У этого нет проблемы с ограничением длины командной строки, поскольку он находится в сценарии.
Теперь сценарий будет вызываться
$ ./script >output
, если
./script 0001g.log 0002g.log 0003g.log > output
ур.
./script 0001g.log > output
./script 0002g.log >> output
./script 0003g.log >> output
, тогда вы можете использовать цикл или
`seq -f '%04gg.log' 10` | script > output
Если хотите, можете поместить файлы в каталог
/opt/location/source
/0001g.log
/0002g.log
/0003g.log
Затем в своем сценарии bash вы можете попробовать следующий
#!/bin/bash
# store path to files
SOURCE="/opt/location/source/"
# loop through files
for FILE in `ls $SOURCE*g.log`; do
# do what you want to specific file
echo $FILE
done