Как я могу распечатать содержимое вместо имени файла с использованием команды linux find?

Выше есть ответ, который предлагает несколько хороших решений проблемы, но я решил дать небольшое объяснение почему того, в чем проблема.

По большей части: пока ваши переименованные файлы журналов (те, что в процессе) не соответствуют критериям, вы вероятно можете запускать это с минимальным риском. Однако вы все равно получите несколько ошибок...

Ваш список файлов генерируется при запуске скрипта. В итоге произойдет следующее:

Сценарий A получает список из 10 файлов. Начинает обработку, 5 файлов в списке (осталось 5) скрипт B получает список из 5 оставшихся файлов, начинает обработку. Скрипт a переходит к обработке следующего файла в списке (который совпадает с файлом, который начал обрабатывать скрипт B) и выдает ошибку, так как файл был переименован. Таким образом, с обработкой ошибок, теоретически, он мог бы перейти к следующему в своем списке файлу и работать без проблем. Но, очевидно, ВСЕГДА есть шанс, что звезды сойдутся, скрипты попадут в один и тот же файл в одно и то же время, и произойдет что-то неожиданное. Взвесьте этот риск, как вам будет угодно.

Потенциально более элегантным решением было бы преобразовать это в python скрипт и изучить параллельные циклы for, что позволило бы вам создать один цикл for и выполнять его параллельно, позволяя одному скрипту делать работу двух или более.

10
24.06.2018, 15:38
2 ответа

Результатом 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
12
27.01.2020, 19:59

Утилита 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.

Связанные:

28
27.01.2020, 19:59

Теги

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