Soal 1Mana yang dengan benar menjelaskan apa yang dilakukan xargs?
xargs — Membangun Perintah dari Standard Input
Susun standard input sebagai argumen dengan echo a b | xargs echo, jalankan satu kata sekali dengan -n1, sisipkan nilai ke {} dengan -I{}, dan proses massal find . -name '*.log' | xargs — dengan diagram dan terminal langsung.
Mengubah Standard Input jadi Argumen — xargs dan -n1
Pipe meneruskan output perintah sebelumnya sebagai standard input perintah berikutnya. Tetapi rm dan echo tidak membaca standard input — keduanya hanya bekerja pada nilai yang ditulis sebagai argumen. xargs adalah perintah yang mengambil apa yang diterimanya di standard input dan menyusunnya jadi argumen untuk perintah yang kamu tulis sesudahnya, jadi dengan echo a b | xargs echo, a dan b menjadi argumen untuk echo di belakang.
Secara default, xargs meneruskan kata-kata yang diterimanya ke satu kali jalan, digabung sebanyak mungkin. Tambahkan -n1 dan ia memecahnya, menjalankan perintah sekali per kata.
| Sintaks | Yang dilakukan |
|---|---|
| xargs | Susun input sebagai argumen lalu jalankan perintah |
xargs -n1 | Jalankan perintah sekali per argumen |
xargs -I{} | Ganti {} dengan input dan sisipkan di mana saja |
find ... | xargs | Jalankan satu proses massal pada yang ditemukan |
| xargs echo rm | Cetak perintah yang akan dijalankan, untuk mengeceknya dulu |
echo di-pipe ke xargs sebagai standard input dan disusun ulang jadi argumen. Satu jalan tergabung, atau tiga jalan satu kata sekali — itulah perbedaan yang dibuat -n1.printf 'one two three\n' | xargs echo got: # got: one two three (digabung, 1 jalan)
printf 'one\ntwo\nthree\n' | xargs -n1 echo item: # item: one / item: two / item: three
Replace String dan Integrasi find — -I{}
xargs -I{} membangun perintah dengan menyisipkan setiap baris input ke posisi `{}`. Karena {} bisa diletakkan di mana saja yang kamu mau, termasuk di tengah perintah, kamu bisa menjalankan bentuk seperti echo file_{}.txt — dengan teks tetap di sekitar nilai — satu baris sekali.
Saat kamu ingin menjalankan sesuatu pada file yang ditemukan find, bentuk find ... | xargs adalah yang standar. xargs menyusun path yang dicetak find sebagai argumen lalu menjalankan satu proses massal atas hasil pencarian. Padukan dengan -I{} dan kamu bisa memproses setiap path yang ditemukan dengan menyisipkannya satu per satu ke `{}`.
find diteruskan ke xargs sebagai satu baris = satu item, dan -I{} menyisipkan masing-masing ke `{}` lalu menjalankannya satu per satu.printf 'alpha\nbeta\n' | xargs -I{} echo 'name = {}' # name = alpha / name = beta
mkdir -p logs # buat direktori sumber
touch logs/a.log logs/b.log # buat 2 file
find logs -name '*.log' | xargs -I{} echo 'found {}' # found logs/a.log / found logs/b.log
Memproses Satu per Satu — Memilih antara -n1 dan -I{}
Baik -n1 maupun -I{} menjalankan perintah satu item sekali, tetapi keduanya berbeda dalam ke mana nilai masuk dan bagaimana input dipecah. -n1 meneruskan kata (potongan yang dipisah spasi atau baris baru) satu per satu sebagai argumen di belakang perintah. -I{} mengambil baris satu per satu dan menyisipkannya ke posisi tempat kamu menulis `{}`.
Pakai `-n1` saat kamu cukup butuh nilai di akhir, dan `-I{}` saat kamu mau teks tetap di sekitar nilai, seperti {}.bak.
| Aspek | `-n1` | `-I{}` |
|---|---|---|
| Ke mana nilai masuk | Berbaris di akhir perintah | Masuk ke tempat kamu menulis {} |
| Satuan pemecahan | Kata (dipisah spasi/baris baru) | Baris (satu baris = satu item) |
| Cocok untuk | Sekadar meneruskan argumen bergiliran | Membangun bentuk dengan teks tetap di sekitar nilai |
printf 'a\nb\n' | xargs -n1 echo prefix # prefix a / prefix b (di akhir)
printf 'a\nb\n' | xargs -I{} echo {}_done # a_done / b_done (disisipkan di tengah perintah)
Proses Massal dalam Praktik — Cek Sebelum Menjalankan
Dalam pekerjaan nyata, kamu memakai xargs untuk copy massal dan hapus massal atas target yang dikumpulkan find. Karena -I{} bisa menyisipkan nilai yang sama ke dua tempat atau lebih, ia bekerja dengan perintah yang menerima dua argumen seperti cp source dest, sehingga kamu bisa membuat backup "nama asli + .bak" sekaligus.
Jangan langsung menjalankan operasi yang tidak bisa dibatalkan seperti rm. Jika kamu menjalankan xargs echo rm sebelum xargs rm, perintah yang akan dijalankan hanya dicetak dan tidak ada yang terhapus. Cek target yang terdaftar, lalu lepaskan echo dan jalankan sungguhan — pendekatan dua langkah cek-lalu-jalan ini adalah cara yang aman.
echo sebelum rm agar target tercek dengan dicetak dulu, lalu jalankan.mkdir -p cache
touch cache/a.tmp cache/b.tmp
find cache -name '*.tmp' | xargs echo rm # hanya mencetak rm cache/a.tmp cache/b.tmp
find cache -name '*.tmp' | xargs rm # jalankan sungguhan setelah yakin
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Bagaimana printf 'a\nb\nc\n' | xargs -n1 echo berperilaku?
Soal 3Apa yang diwakili {} dalam xargs -I{}?