Misalkan saya ingin menghapus semua file dalam folder yang lebih besar dari 1 MB.
$ find . -size +1M | xargs -0 rm
Ini tidak akan menghapus file yang memiliki ruang dalam namanya. Jadi saya ingin mengutip semua argumen yang dikirimkannya rm
. Jika find
memberikan Some report.docx
itu harus lulus "Some report.docx"
untuk rm
.
Bagaimana saya bisa melakukan itu?
xargs
. Juga seperti yang disarankan wiki, jangan gunakanxargs
tanpa melewati-print0
tofind
.xargs -d$'\n'
untuk membatasi pembatas hanya untuk baris baru (dan bukan spasi; ini tidak akan memproses tanda kutip, dll. Khusus - Saya telah memeriksa sistem GNU) - jawaban yang diberikan dalam stackoverflow.com/a/33528111/94687Jawaban:
Penggunaan sederhana:
Jika Anda bersikeras menggunakan
xargs
danrm
denganfind
, tambahkan saja-print0
perintah Anda:Cara lain:
Dari
man find
:sumber
"Some report.docx"
untukrm
, kecuali nama file berisi tanda kutip. Yang Anda inginkan adalah lulusSome report.docx
tanpa gangguanrm
. Jawaban KasiyA (sekarang) menunjukkan cara umum untuk melakukan itufind
. [KasiyA: maaf untuk ping yang salah sebelumnya.]$0
dan$1
lainxargs -0
bukanxargs -r0
.Pilihan
-0
darixargs
berarti bahwa output dari pipa ditafsirkan sebagai null dihentikan item. Dalam hal demikian, Anda juga perlu membuat input untuk pipafind ... -print0
.sumber
Saya memiliki persyaratan yang sama dan akhirnya menggunakan
-I
sakelar untuk memiliki pengganti dan saya dapat mengutipnya.sumber