Saya ingin tahu apa perbedaan antara ini
ls | xargs rm
ls | xargs -i{} rm {}
Keduanya bekerja untuk saya
Saya ingin tahu apa perbedaan antara ini
ls | xargs rm
ls | xargs -i{} rm {}
Keduanya bekerja untuk saya
Jawaban:
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 masalah
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:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
Dalam kasus Anda, kedua perintah menghasilkan hasil yang sama. Dalam bentuk kedua, Anda hanya membuat eksplisit perilaku default dengan opsi -i.