Dari man xargs
xarg membaca item dari input standar, dibatasi oleh blank (yang dapat dilindungi dengan tanda kutip ganda atau tunggal atau backslash) atau baris baru, dan menjalankan perintah (defaultnya adalah / bin / echo) satu atau lebih kali dengan argumen awal diikuti oleh item dibaca dari input standar. Baris kosong pada input standar diabaikan.
Kami dapat (kebanyakan) memperbaiki perintah awal Anda dengan mengubah pembatas xargs ke baris baru:
ls | egrep '. ' | xargs -d '\n' rm
(jangan lakukan ini ... baca terus)
Tetapi bagaimana jika nama file berisi baris baru?
touch "filename with blanks
and newline"
Karena nama file Unix dapat berisi baris kosong dan baris baru , perilaku default ini sering bermasalah; nama file yang mengandung blank dan / atau baris baru salah diproses oleh xargs. Dalam situasi ini, lebih baik menggunakan opsi -0 , yang mencegah masalah tersebut.
ls
benar-benar alat untuk konsumsi langsung oleh manusia , alih-alih kita perlu menggunakan find
perintah yang dapat memisahkan nama file dengan karakter null ( -print0
). Kita juga perlu memberi tahu grep untuk menggunakan karakter nol untuk memisahkan input ( -z
) dan output ( -Z
). Akhirnya, kami memberi tahu xargs untuk juga menggunakan karakter nol ( -0
)
find . -type f -print0 | egrep '. ' -z -Z | xargs -0 rm
echo
pertama, untuk menjaga dari kesalahan ketik. Tambahkanecho
di depan dan itu akan mencetak semua file yang akan dihapus.