Mengapa ini tidak berhasil?
ls *.txt | xargs cat > all.txt
(Saya ingin menggabungkan konten semua file teks menjadi file 'all.txt' tunggal.) temukan dengan -exec juga harus berfungsi, tetapi saya benar-benar ingin memahami sintaks xargs.
Terima kasih
Jika beberapa nama file Anda berisi ', "atau spasi
xargs
akan gagal karena masalah pemisahSecara umum tidak pernah berjalan
xargs
tanpa -0 karena akan kembali dan menggigit Anda suatu hari.Sebaiknya gunakan GNU Parallel:
atau jika Anda lebih suka:
Pelajari lebih lanjut tentang GNU Parallel http://www.youtube.com/watch?v=OpaiGYxkSuQ
sumber
all.txt
adalah file di direktori yang sama, jadi kucing jadi bingung ketika ingin menulis dari file yang sama ke file yang sama.Di samping itu:
Ini akan membaca dari file teks dalam direktori Anda saat ini ke all.txt dalam subdirektori (tidak termasuk dengan
*.txt
).sumber
Anda juga bisa menemukan batasan panjang baris perintah. Bagian dari alasan untuk menggunakan
xargs
adalah bahwa ia membagi input menjadi potongan-potongan berukuran garis perintah yang aman. Jadi, bayangkan sebuah situasi di mana Anda memiliki ratusan ribu file .txt di direktori.ls *.txt
akan gagal. Anda perlu melakukannya.txt$
dalam hal ini adalah ekspresi reguler yang cocok dengan semua yang berakhiran .txt (jadi tidak persis seperti itu*.txt
, karena jika Anda memiliki file bernamaatxt
, kemudian*.txt
tidak akan cocok dengan itu, tetapi ungkapan reguler akan.)Penggunaan lintasan lain karena, seperti yang ditunjukkan oleh jawaban lain, all.txt dicocokkan dengan pola
*.txt
jadi akan ada konflik antara input dan output.Perhatikan bahwa jika Anda memiliki file dengan
'
dalam nama mereka (dan ini mungkin menjadi penyebabunmatched single quote
kesalahan), Anda ingin melakukannyaOpsi --null memberi tahu grep untuk menggunakan output yang dipisahkan oleh a
\0
(alias null) karakter alih-alih baris baru default, dan-0
opsi untuk `xargs memberitahu dia untuk mengharapkan inputnya dalam format yang sama. Ini akan berfungsi bahkan jika Anda memiliki nama file dengan baris baru di dalamnya.sumber