Apa cara tercepat dan paling pragmatis untuk menggabungkan semua file * .txt dalam direktori menjadi satu file teks besar?
Saat ini saya menggunakan windows dengan cygwin sehingga saya memiliki akses ke BASH.
Perintah shell Windows akan menyenangkan juga, tetapi saya ragu ada satu.
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.
sumber
Perintah Windows shell
type
dapat melakukan ini:Ketik
type
perintah juga menulis nama file ke stderr, yang tidak ditangkap oleh>
operator pengalihan (tetapi akan muncul di konsol).sumber
Anda dapat menggunakan shell Windows
copy
untuk menggabungkan file.Dari bantuan:
sumber
Hati-hati, karena tidak ada metode ini yang berfungsi dengan sejumlah besar file. Secara pribadi, saya menggunakan baris ini:
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
sumber
for i in $(ls *.txt);do cat $i >> output.txt;done
?ls | grep
merupakan antipattern yang sangat buruk).ls *.txt
gagal jika ada terlalu banyak file (daftar argumen kesalahan terlalu panjang)?cara paling pragmatis dengan shell adalah perintah cat. cara lain termasuk,
sumber
cat
metode di atas akan menyatukan baris terakhir dan baris pertama dari file yang berdekatan.Bagaimana dengan pendekatan ini?
sumber
-maxdepth 1
kefind
perintah.sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
Sebagai contoh:
Itu akan mengambil semua file txt di folder C: \ dan menyimpannya di folder C: \ 1 dengan nama all.txt
Atau
Sebagai contoh:
Itu akan mengambil semua file yang ada di folder dan meletakkan Konten di sana di C: \ 1 \ all.txt
sumber
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.sumber
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"
sumber
cat *.txt > all.txt
>
perintah menimpa semua.txt jika ada,>>
menambah data ke file yang adasemua itu jahat ....
hal yang mudah.
sumber
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;