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

У меня есть сценарий, который работает так для одного файл.

./script 0001g.log > output

для двух или более файлов, как этот

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

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

У меня есть 1000 входных файлов, как мне сделать цикл для выполнения моего скрипта.

0
22.06.2016, 04:36
3 ответа

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

Просто

$ ./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
0
28.01.2020, 04:50

, если

./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
0
28.01.2020, 04:50

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

/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
0
28.01.2020, 04:50

Теги

Похожие вопросы