Выше есть ответ, который предлагает несколько хороших решений проблемы, но я решил дать небольшое объяснение почему того, в чем проблема.
По большей части: пока ваши переименованные файлы журналов (те, что в процессе) не соответствуют критериям, вы вероятно можете запускать это с минимальным риском. Однако вы все равно получите несколько ошибок...
Ваш список файлов генерируется при запуске скрипта. В итоге произойдет следующее:
Сценарий A
получает список из 10 файлов
. Начинает обработку, 5 файлов
в списке (осталось 5) скрипт B
получает список из 5 оставшихся файлов
, начинает обработку. Скрипт a
переходит к обработке следующего файла в списке (который совпадает с файлом, который начал обрабатывать скрипт B
) и выдает ошибку, так как файл был переименован. Таким образом, с обработкой ошибок, теоретически, он мог бы перейти к следующему в своем списке файлу и работать без проблем. Но, очевидно, ВСЕГДА есть шанс, что звезды сойдутся, скрипты попадут в один и тот же файл в одно и то же время, и произойдет что-то неожиданное. Взвесьте этот риск, как вам будет угодно.
Потенциально более элегантным решением было бы преобразовать это в python
скрипт и изучить параллельные циклы for
, что позволило бы вам создать один цикл for и выполнять его параллельно, позволяя одному скрипту делать работу двух или более.
Результатом find
будут соответствующие имена файлов.
Вы можете направить вывод(|
)на xargs cat
, который будет выполнять команду cat
для каждого файла.
напр.:
find -type f -name 'cbs_cdr_vou_20180615*.unl' | xargs cat > /home/fifa/cbs/test.txt
Другим вариантом будет использование-exec cat
find -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} \; > /home/fifa/cbs/test.txt
Утилита find
работает с путями. Если в команде find
не указано конкретное действие для найденных путей, действие по умолчанию — их вывод.
Вы можете выполнить действие с найденными путями, например запустить cat
, добавив -exec
к команде find
:
find. -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt
Это позволит найти все обычные файлы в текущем каталоге или под ним, чьи имена соответствуют заданному шаблону. Для настолько больших пакетов, насколько это возможно, будет вызываться cat
для объединения содержимого файлов.
Вывод пойдет на /home/fifa/cbs/test.txt
.
Связанные: