Saya ingin tahu apa perbedaan antara ini
ls | xargs rm
ls | xargs -i{} rm {}
Keduanya bekerja untuk saya
xargs rm
akan memanggil rm
dengan semua argumen sebagai parameter berangkat dengan spasi.
xargs -i{} rm {}
akan meminta rm {}
untuk setiap argumen dan {}
akan digantikan oleh argumen saat ini.
Jika Anda memiliki 2 argumen a.txt
dan b.txt
, xargs rm
akan memanggil ini
rm a.txt b.txt
Tapi xargs -i{} rm {}
akan menelepon
rm a.txt
rm b.txt
Ini karena -i
opsi menyiratkan -L 1
opsi yang berarti perintah rm
hanya akan mengambil 1
baris setiap kali. Dan di sini setiap baris hanya berisi 1 argumen.
Periksa tautan Ideone ini untuk mendapatkan lebih banyak gagasan tentangnya.
rm
itu tidak masalahDengan kawat gigi itu akan menelurkan satu
rm
proses per file. Tanpa kawat gigi,xargs
akan meneruskan sebanyak mungkin nama file ke setiaprm
perintah.Membandingkan
dan
sumber
Opsi -i (setara dengan - ganti) membuat semacam placeholder tempat xargs menyimpan input yang baru saja diterima. Di perintah kedua Anda, placeholder adalah "{}", ini berfungsi seperti opsi find -exec. Setelah ditentukan, xargs akan menggantikan placeholder ini dengan seluruh jalur input. Jika Anda tidak menyukai nama "{}", Anda dapat menentukan sendiri:
Dalam kasus Anda, kedua perintah menghasilkan hasil yang sama. Dalam bentuk kedua, Anda hanya membuat eksplisit perilaku default dengan opsi -i.
sumber