У меня есть тысячи файлов 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
команды.
cat
.Ответы:
find
Утилита занимается путевыми именами. Если вfind
команде не найдено никаких конкретных действий для найденных имён путей, по умолчанию их действие выводится.Вы можете выполнить действие с найденными путями, например, запуск
cat
, добавив-exec
вfind
команду:Это позволит найти все обычные файлы в или под текущим каталогом, имена которых соответствуют заданному шаблону. Для как можно большего количества этих пакетов
cat
будет вызвано объединение содержимого файлов.Выход будет идти к
/home/fifa/cbs/test.txt
.Связанные с:
источник
Результат
find
будет с соответствующими именами файлов.Вы можете направить (
|
) вывод, кxargs cat
которому будет относитьсяcat
команда для каждого файла.например:
Другой вариант будет использовать
-exec cat
источник
-exec cat {} \;
и-exec -cat {} +
. Кстати, спасибо, Ярон.find -print0 | xargs -0
не уязвим для пробелов / кавычек / и т.д.-exec cat {} \;
запускает cat отдельно для каждого файла, вместо того, чтобы связывать их вместе, как xargs. Не используйте его, если вы явно не хотите этого (например, команда, которая работает только для одного файла за раз), или если вам нужна переносимость в систему без-exec ... +
и без-print0
/xargs -0
. Я немного удивлен, чтоfind|xargs
это заметно медленнее, чем-exec cat {} +
, однако. У вас очень мало файлов, поэтому затраты на запуск очень высоки? Или вы только времяxargs
версии, когда ваш дисковый кэш был холодным?