Ответ 1
Это добавляет вывод в файл all.txt
cat *.txt >> all.txt
Это перезаписывает all.txt
cat *.txt > all.txt
Каков самый быстрый и самый прагматичный способ объединить все *.txt файл в каталог в один большой текстовый файл?
В настоящее время я использую окна с cygwin, поэтому у меня есть доступ к BASH.
Командная оболочка Windows тоже будет хороша, но я сомневаюсь, что она есть.
Это добавляет вывод в файл all.txt
cat *.txt >> all.txt
Это перезаписывает all.txt
cat *.txt > all.txt
Просто помните, что для всех решений, предоставленных до сих пор, оболочка решает порядок, в котором файлы объединены. Для Bash, IIRC, этот алфавитный порядок. Если порядок важен, вы должны либо соответствующим образом указать файлы (01file.txt, 02file.txt и т.д.), Либо указать каждый файл в том порядке, в котором вы хотите его соединить.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Команда оболочки Windows type
может сделать это:
type *.txt >outputfile
Команда type
также записывает имена файлов в stderr, которые не записываются оператором перенаправления >
(но будет отображаться на консоли).
Оболочку оболочки copy
можно использовать для конкатенации файлов.
C:\> copy *.txt outputfile
С помощью:
Чтобы добавить файлы, укажите один файл для назначения, но несколько файлов для источника (с использованием подстановочных знаков или файлов1 + файл2 + формат файла3).
наиболее прагматичным способом с оболочкой является команда cat. другие способы включают,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
Как насчет этого подхода?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
Будьте осторожны, потому что ни один из этих методов не работает с большим количеством файлов. Лично я использовал эту строку:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
РЕДАКТИРОВАТЬ: Как кто-то сказал в комментариях, вы можете заменить $(ls | grep ".txt")
на $(ls *.txt)
РЕДАКТИРОВАТЬ: благодаря опыту @gnourf_gnourf, использование glob является правильным способом перебора файлов в каталоге. Следовательно, кощунственные выражения типа $(ls | grep ".txt")
должны быть заменены на *.txt
(см. Статью здесь).
Хорошее решение
for i in *.txt;do cat $i >> output.txt;done
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
Пример:
type C:\*.txt > C:\1\all.txt
Это возьмет все файлы txt в папке C:\и сохранит его в папке C:\1 по имени all.txt
или
type [source folder]\* > [destination folder]\[file name].[File extension]
Пример:
type C:\* > C:\1\all.txt
Это займет все файлы, которые присутствуют в папке, и поместите туда содержимое в C:\1\all.txt
Вы можете сделать так: cat [directory_path]/**/*.[h,m] > test.txt
если вы используете {}
для включения расширения файлов, которые вы хотите найти, возникает проблема последовательности.
Когда вы сталкиваетесь с проблемой, при которой он помещает all.txt в all.txt, вы можете попробовать проверить, существует ли all.txt или нет, если существует, удалить
все это неприятно....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
легкий материал.