Відповіді:
Це додає вихід до all.txt
cat *.txt >> all.txt
Це перезаписує весь.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Пам'ятайте лише, що для всіх рішень, що надаються до цього часу, оболонка визначає порядок з'єднання файлів. Для Bash, IIRC, це алфавітний порядок. Якщо замовлення важливе, вам слід або належним чином назвати файли (01file.txt, 02file.txt тощо) або вказати кожен файл у порядку, який ви хочете, щоб він був зведений.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Команда оболонки Windows typeможе це зробити:
type *.txt >outputfile
typeКоманда Type також записує імена файлів в stderr, які не захоплюються >оператором переадресації (але відображатимуться на консолі).
Ви можете використовувати оболонку Windows copyдля об'єднання файлів.
C:\> copy *.txt outputfile
З довідки:
Щоб додати файли, вкажіть один файл для призначення, але декілька файлів для джерела (використовуючи символи підстановки чи файл1 + файл2 + файл3).
Будьте уважні, оскільки жоден із цих методів не працює з великою кількістю файлів. Особисто я використав цей рядок:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Як сказав хтось - то в коментарях, ви можете замінити $(ls | grep ".txt")з$(ls *.txt)
EDIT: завдяки @gnourf_gnourf досвід, використання glob є правильним способом ітерації файлів у каталозі. Отже, блюзнірські вирази на зразок $(ls | grep ".txt")повинні бути замінені *.txt(див. Статтю тут ).
Гарне рішення
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done?
ls | grepце дуже поганий антипатерн).
ls *.txtпровалитися, якщо занадто багато файлів (список аргументів занадто довгий помилка)?
самий прагматичний спосіб з оболонкою - це команда cat. інші способи включають,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
catметоди, об'єднайте останній і перший рядок із суміжних файлів.
Як щодо цього підходу?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1до findкоманди.
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
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, ви можете спробувати перевірити, чи існує все.txt чи ні, якщо воно існує, видалити
Подобається це:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt >команда перезаписує all.txt, якщо вона існує, >>додає дані в існуючий файл
все це противно ...
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
легкі речі.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;