У меня есть сотни файлов в одном каталоге, есть ли простая команда или набор команд, которые я могу использовать, чтобы добавить их вместе? Я не хочу использовать какие-либо петли.
4 ответа
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
Если файлов не слишком много:
cat * > /some/new/file
Иначе:
find . -exec cat {} + > /some/new/file
find . -exec cat {} \; > /some/new/file
Аналогично предложению Игнатио:
rm /the/output && find . -print0 | xargs -0 cat >> /the/output
Без использования xargs вы можете указать максимальную длину командной строки. Без использования -print0 у вас могут возникнуть проблемы с файлами со странными символами (например, пробелами) в именах. Но это также специфично для GNU.
Это добавит все файлы в outfile:
for file in !(outfile); do
cat "$file" >> outfile
done
Вы должны сначала удалить outfile, если он существует. Это, однако, не поймает точечные файлы. Если вы хотите поймать их, вы можете использовать две модели
.??* !(outfile)
создать свой список файлов. Требуется, чтобы точечный файл имел длину не менее 3, следовательно, исключает. а также ..!