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

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.


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 '{}'

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.