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

У меня есть тысячи файлов unl, названных примерно так: cbs_cdr_vou_20180624_603_126_239457.unl . Я хотел напечатать все строки из этих файлов, используя следующую команду. но это дает мне только имена файлов. Мне не нужны имена файлов, мне просто нужно содержимое этих файлов.

 find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt 

Токовый выход:

 ./cbs_cdr_vou_20180615_603_129_152023.unl ./cbs_cdr_vou_20180615_603_128_219001.unl ./cbs_cdr_vou_20180615_602_113_215712.unl ./cbs_cdr_vou_20180615_602_120_160466.unl ./cbs_cdr_vou_20180615_603_125_174428.unl ./cbs_cdr_vou_20180615_601_101_152369.unl ./cbs_cdr_vou_20180615_603_133_193306.unl 

Ожидаемый результат:

 8801865252020|200200|20180613100325|; 8801837463298|200200|20180613111209|; 8801845136955|200200|20180613133708|; 8801845205889|200200|20180613141140|; 8801837612072|200200|20180613141525|; 8801877103875|200200|20180613183008|; 8801877167964|200200|20180613191607|; 8801845437651|200200|20180613200415|; 8801845437651|200200|20180613221625|; 8801839460670|200200|20180613235936|; 

Обратите внимание, что для команды cat я получаю сообщение об ошибке типа -bash: /bin/logger: Argument list too long , поэтому хотел использовать команду find вместо команды cat .

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

Связанные с:

  • Понимание опции -exec `find`

Вывод find приведет к соответствующим именам файлов.
Вы можете xargs cat ( | ) вывод в 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