Как сделать цикл для выполнения множества файлов

Как сделать цикл для выполнения множества файлов

У меня есть скрипт, который работает следующим образом для одного файла.

./script 0001g.log > output

для двух или более файлов, например, этот

./script 0001g.log 0002g.log 0003g.log > output

Скрипт берет одно специальное число из каждого входного файла и помещает его в один выходной файл.

Мой вопрос: у меня есть 1000 входных файлов, как мне организовать цикл для выполнения моего скрипта?

решение1

У вас есть несколько возможных решений:

Просто

$ ./script *g.log >output

... и надеюсь, что это *g.logне расширится до чего-то, что сделает командную строку слишком длинной. Это не очень надежно.

Если ваш скрипт не зависит от количества переданных ему файлов, т. е. если вывод можно просто добавить к outputкаждому входному файлу, то это еще одно решение:

$ find ./ -type f -name "*g.log" | xargs ./script >output

Третьим решением было бы перенести цикл в сам скрипт:

for f in *g.log; do
  # old code using "$f" as file name
done

Здесь нет проблем с ограничением длины командной строки, поскольку это скрипт.

Вызов скрипта теперь будет

$ ./script >output

решение2

если

./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

решение3

Если хотите, можете поместить файлы в каталог

/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

Связанный контент