Jawaban:
Ini menambahkan output ke all.txt
cat *.txt >> all.txt
Ini menimpa semua.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Ingat saja, untuk semua solusi yang diberikan sejauh ini, shell memutuskan urutan di mana file-file tersebut digabungkan. Untuk Bash, IIRC, itu urutan alfabet. Jika urutannya penting, Anda harus memberi nama file dengan tepat (01file.txt, 02file.txt, dll ...) atau tentukan setiap file dalam urutan yang Anda inginkan.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Perintah Windows shell typedapat melakukan ini:
type *.txt >outputfile
Ketik typeperintah juga menulis nama file ke stderr, yang tidak ditangkap oleh >operator pengalihan (tetapi akan muncul di konsol).
Anda dapat menggunakan shell Windows copyuntuk menggabungkan file.
C:\> copy *.txt outputfile
Dari bantuan:
Untuk menambahkan file, tentukan satu file untuk tujuan, tetapi beberapa file untuk sumber (menggunakan wildcard atau format file1 + file2 + file3).
Hati-hati, karena tidak ada metode ini yang berfungsi dengan sejumlah besar file. Secara pribadi, saya menggunakan baris ini:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Seperti yang dikatakan seseorang di komentar, Anda dapat mengganti $(ls | grep ".txt") dengan$(ls *.txt)
EDIT: terima kasih kepada keahlian @gnourf_gnourf, penggunaan glob adalah cara yang benar untuk beralih pada file dalam direktori. Akibatnya, ekspresi menghujat seperti $(ls | grep ".txt")harus diganti oleh *.txt(lihat artikel di sini ).
Solusi yang bagus
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done?
ls | grepmerupakan antipattern yang sangat buruk).
ls *.txtgagal jika ada terlalu banyak file (daftar argumen kesalahan terlalu panjang)?
cara paling pragmatis dengan shell adalah perintah cat. cara lain termasuk,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
catmetode di atas akan menyatukan baris terakhir dan baris pertama dari file yang berdekatan.
Bagaimana dengan pendekatan ini?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1ke findperintah.
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]
Sebagai contoh:
type C:\*.txt > C:\1\all.txt
Itu akan mengambil semua file txt di folder C: \ dan menyimpannya di folder C: \ 1 dengan nama all.txt
Atau
type [source folder]\* > [destination folder]\[file name].[File extension]
Sebagai contoh:
type C:\* > C:\1\all.txt
Itu akan mengambil semua file yang ada di folder dan meletakkan Konten di sana di C: \ 1 \ all.txt
Anda bisa melakukan ini:
cat [directory_path]/**/*.[h,m] > test.txt
jika Anda menggunakan {}untuk menyertakan ekstensi file yang ingin Anda temukan, ada masalah urutan.
Ketika Anda mengalami masalah di mana ia menjadi all.txt ke all.txt, Anda dapat mencoba memeriksa semua.txt ada atau tidak, jika ada, hapus
Seperti ini:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt >perintah menimpa semua.txt jika ada, >>menambah data ke file yang ada
semua itu jahat ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
hal yang mudah.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;