apa perbedaan antara xargs dengan kawat gigi dan tanpa di linux

18

Saya ingin tahu apa perbedaan antara ini

ls | xargs rm

ls | xargs -i{} rm {}

Keduanya bekerja untuk saya


sumber

Jawaban:

19

xargs rmakan memanggil rmdengan 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.txtdan 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 -iopsi menyiratkan -L 1opsi yang berarti perintah rmhanya akan mengambil 1baris setiap kali. Dan di sini setiap baris hanya berisi 1 argumen.

Periksa tautan Ideone ini untuk mendapatkan lebih banyak gagasan tentangnya.

Shiplu Mokaddim
sumber
YANG SATU LEBIH BAIK
1
@ user19140477031 tergantung pada operasi apa yang Anda lakukan. karena rmitu tidak masalah
Shiplu Mokaddim
3

Dengan kawat gigi itu akan menelurkan satu rmproses per file. Tanpa kawat gigi, xargsakan meneruskan sebanyak mungkin nama file ke setiap rmperintah.

Membandingkan

ls | xargs echo

dan

ls | xargs -i echo '{}'
kmkaplan
sumber
2

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.

aag
sumber