2

У меня есть сотни файлов в одном каталоге, есть ли простая команда или набор команд, которые я могу использовать, чтобы добавить их вместе? Я не хочу использовать какие-либо петли.

4 ответа4

5
cat * >/path/to/somewhere

не делай

cat * > toall.txt

потому что «toall.txt» создается до запуска cat, и вы получите странный результат, "cat" вставляя toall.txt в toall.txt.

если хотите cat в текущем каталоге, вы должны использовать

cat [some_globbing] > file #or
cat * > .dotted_file

.dotted_file не раскрывается с помощью * globbing.

или например

(ls *.txt | xargs cat ) > /some/file
4

Если файлов не слишком много:

cat * > /some/new/file

Иначе:

find . -exec cat {} + > /some/new/file
find . -exec cat {} \; > /some/new/file
0

Аналогично предложению Игнатио:

rm /the/output && find . -print0 | xargs -0 cat >> /the/output

Без использования xargs вы можете указать максимальную длину командной строки. Без использования -print0 у вас могут возникнуть проблемы с файлами со странными символами (например, пробелами) в именах. Но это также специфично для GNU.

-1

Это добавит все файлы в outfile:

for file in !(outfile); do
        cat "$file" >> outfile
done    

Вы должны сначала удалить outfile, если он существует. Это, однако, не поймает точечные файлы. Если вы хотите поймать их, вы можете использовать две модели

.??* !(outfile)

создать свой список файлов. Требуется, чтобы точечный файл имел длину не менее 3, следовательно, исключает. а также ..!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .