Какой самый быстрый и самый прагматичный способ объединить все файлы * .txt в каталоге в один большой текстовый файл?
В настоящее время я использую Windows с Cygwin, поэтому у меня есть доступ к BASH.
Команда оболочки Windows тоже подойдет, но я сомневаюсь, что она есть.
echo *.txt | xargs cat > all.txt
Просто помните, что для всех приведенных решений оболочка определяет порядок, в котором файлы объединяются. Для Bash, IIRC, это в алфавитном порядке. Если порядок важен, вы должны либо назвать имена файлов соответствующим образом (01file.txt, 02file.txt и т. Д.) Или указать каждый файл в том порядке, в котором вы хотите его объединить.
источник
Команда оболочки Windows
type
может сделать это:type
Команда type также записывает имена файлов в stderr, которые не>
перехватываются оператором перенаправления (но отображаются на консоли).источник
Вы можете использовать оболочку Windows
copy
для объединения файлов.Из справки:
источник
Будьте осторожны, потому что ни один из этих методов не работает с большим количеством файлов. Лично я использовал эту строку:
РЕДАКТИРОВАТЬ: Как кто-то сказал в комментариях, вы можете заменить
$(ls | grep ".txt")
на$(ls *.txt)
РЕДАКТИРОВАТЬ: благодаря опыту @gnourf_gnourf, использование glob является правильным способом перебора файлов в каталоге. Следовательно, кощунственные выражения вроде
$(ls | grep ".txt")
должны быть заменены на*.txt
(см. Статью здесь ).Хорошее решение
источник
for i in $(ls *.txt);do cat $i >> output.txt;done
?ls | grep
это очень плохой антипаттерн).ls *.txt
сбой, если файлов слишком много (ошибка списка аргументов слишком длинная)?самый прагматичный способ с оболочкой - это команда cat. другие способы включают в себя,
источник
cat
методы, конкатенация последней строки и первой строки из соседних файловКак насчет этого подхода?
источник
-maxdepth 1
вfind
команду.sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
Например:
Это возьмет все текстовые файлы в папке C: \ и сохранит их в папке C: \ 1 под именем all.txt.
Или
Например:
Это возьмет все файлы, которые присутствуют в папке, и поместит туда содержимое в C: \ 1 \ all.txt.
источник
Вы можете сделать так:
cat [directory_path]/**/*.[h,m] > test.txt
Если вы используете
{}
расширение файлов, которые вы хотите найти, возникает проблема последовательности.источник
Когда вы сталкиваетесь с проблемой, в которой он переворачивает all.txt в all.txt, вы можете попробовать проверить, существует ли all.txt или нет, если существует, удалить
Как это:
[ -e $"all.txt" ] && rm $"all.txt"
источник
cat *.txt > all.txt
>
команда перезаписывает all.txt, если он существует,>>
добавляет данные в существующий файлвсе это противно ....
легкий материал
источник
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;