Perintah xargs: Cara Pakai, Opsi -n dan -I, dan Penggunaan dengan find
Perintah xargs adalah alat Linux yang mengubah baris dan kata dari input standar menjadi argumen perintah lain lalu menjalankannya. Saat kami meneruskan tiga file log yang ditemukan find ke wc melalui xargs di folder kerja server AlmaLinux 9, satu file yang namanya mengandung spasi terpecah menjadi dua dan menimbulkan error, lalu dengan -print0 dan -0 jumlah baris ketiga file muncul semua.
Output di bawah dijalankan di dalam folder kerja dengan akun root server AlmaLinux 9.8. Daftar nama, log, dan file sementara adalah file contoh yang dibuat untuk pengujian, dan alamat IP serta path folder di dalamnya juga nilai contoh.
1️⃣ Cara pakai dasar perintah xargs
xargs memecah input standar dari perintah sebelumnya berdasarkan spasi dan baris baru, lalu menjalankan perintah di belakangnya dengan potongan itu sebagai argumen. Kami memeriksanya dengan names.txt yang berisi satu nama per baris.
cat names.txtalice
bob
carol
dave
erinJika output cat diteruskan ke xargs echo, lima baris menjadi argumen satu echo dan tampil dalam satu baris.
cat names.txt | xargs echoalice bob carol dave erinJika tidak ada perintah di belakangnya, xargs menjalankan echo, jadi hasilnya sama.
cat names.txt | xargsalice bob carol dave erinPipe menghubungkan output perintah sebelumnya ke input standar perintah berikutnya, sehingga tidak ada yang masuk ke argumen perintah berikutnya. Jika list.txt yang berisi tiga nama file hanya diteruskan lewat pipe ke wc -l, wc menghitung 3 baris daftar itu sendiri.
cat list.txtlogs/access.log
logs/error.log
tmp/keep.txtcat list.txt | wc -l3Dengan xargs di tengah, tiga nama dalam daftar menjadi argumen wc dan jumlah baris tiap file muncul.
cat list.txt | xargs wc -l 3 logs/access.log
2 logs/error.log
1 tmp/keep.txt
6 total2️⃣ Opsi xargs -n dan -I
Tanpa opsi, seluruh input masuk ke satu kali eksekusi perintah. Untuk mengulang perintah, tentukan jumlah argumen per eksekusi dengan -n. Gambar di bawah menunjukkan cara lima nama yang sama dikelompokkan menurut opsi.
-n 1 menjalankan echo untuk tiap nama sehingga tampil lima baris.
cat names.txt | xargs -n 1 echoalice
bob
carol
dave
erin-n 2 mengelompokkan per dua dan meneruskan sisanya terpisah.
cat names.txt | xargs -n 2 echoalice bob
carol dave
erinUntuk melihat perintah yang dijalankan, tambahkan -t. Baris perintah tampil lebih dulu dan output-nya di bawahnya.
cat names.txt | xargs -t -n 2 echoecho alice bob
alice bob
echo carol dave
carol dave
echo erin
erinJika argumen harus berada di tempat selain akhir perintah, tentukan placeholder dengan -I. Satu baris masuk ke tempat {} setiap kali, dan jika teks yang sama muncul beberapa kali, semuanya diganti.
cat names.txt | xargs -I {} echo 'user: {}'user: alice
user: bob
user: carol
user: dave
user: erincat names.txt | xargs -I {} echo '{} -> home/{}'alice -> home/alice
bob -> home/bob
carol -> home/carol
dave -> home/dave
erin -> home/erinDengan cara yang sama Anda dapat membuat folder per nama. Buat dulu folder home, lalu gunakan -I {} untuk membuat folder per nama di bawahnya: lima folder akan terbentuk.
mkdir homecat names.txt | xargs -I {} mkdir home/{}ls homealice bob carol dave erin-I memperlakukan satu baris sebagai satu argumen, jadi tidak bisa dipakai bersama -n. Saat keduanya ditulis, -I diabaikan dengan peringatan dan {} dicetak apa adanya.
cat names.txt | xargs -I {} -n 2 echo {}xargs: warning: options --replace and --max-args/-n are mutually exclusive, ignoring previous --replace value
{} alice bob
{} carol dave
{} erin-L mengelompokkan berdasarkan jumlah baris. Jika satu baris berisi beberapa kata, kata-kata itu diteruskan bersama, dan pada names.txt dengan satu nama per baris, -L 2 memberi hasil yang sama dengan -n 2.
cat names.txt | xargs -L 2 echoalice bob
carol dave
erin3️⃣ Kombinasi find dan xargs
Daftar nama tidak perlu dibuat manual: file yang ditemukan find bisa langsung diteruskan ke xargs. Mencari file berakhiran .log di folder log menghasilkan tiga file, dan salah satunya memiliki spasi di namanya.
find /root/work/logs -name '*.log'/root/work/logs/access.log
/root/work/logs/error.log
/root/work/logs/old access.logSaat daftar ini langsung diteruskan ke xargs wc -l, nama berspasi terpecah menjadi old dan access.log, muncul dua baris error, dan totalnya hanya 5 baris dari dua file.
find /root/work/logs -name '*.log' | xargs wc -l 3 /root/work/logs/access.log
2 /root/work/logs/error.log
wc: /root/work/logs/old: No such file or directory
wc: access.log: No such file or directory
5 total-print0 pada find memisahkan nama dengan karakter null alih-alih baris baru, dan -0 pada xargs memecah argumen hanya pada karakter null itu. Jika keduanya dipakai, jumlah baris ketiga file muncul, termasuk file berspasi.
find /root/work/logs -name '*.log' -print0 | xargs -0 wc -l 3 /root/work/logs/access.log
2 /root/work/logs/error.log
1 /root/work/logs/old access.log
6 totalOpsi -exec pada find melakukan hal yang sama. Dengan + setelah {}, file yang ditemukan diteruskan sekaligus sehingga hasilnya sama, dan find meneruskan spasi pada nama file apa adanya. xargs juga menerima output perintah selain find, jadi gunakan saat input tidak hanya berasal dari find, atau saat Anda perlu menentukan jumlah per eksekusi (-n) atau jumlah eksekusi serentak (-P).
find /root/work/logs -name '*.log' -exec wc -l {} + 3 /root/work/logs/access.log
2 /root/work/logs/error.log
1 /root/work/logs/old access.log
6 totalUntuk memilih hanya file temuan yang berisi string tertentu, tambahkan grep -l setelah xargs. File yang berisi wp-login ada dua: log akses dan log error.
find /root/work/logs -name '*.log' -print0 | xargs -0 grep -l wp-login/root/work/logs/access.log
/root/work/logs/error.log4️⃣ Menghapus file dengan perintah xargs
Dengan rm setelah xargs, file temuan langsung terhapus sekaligus, jadi periksa dulu file mana yang akan diteruskan sebelum menghapus. Jika echo ditaruh di depan rm, hanya baris perintah yang akan dijalankan yang tampil dan file tetap ada.
find /root/work/tmp -name '*.tmp' -print0 | xargs -0 echo rmrm /root/work/tmp/cache-a.tmp /root/work/tmp/cache-b.tmp /root/work/tmp/cache-c.tmpls tmpcache-a.tmp cache-b.tmp cache-c.tmp keep.txtDengan -p, xargs bertanya untuk setiap perintah apakah akan dijalankan. Jika memasukkan n, tidak ada yang dihapus dan tiga file sementara tetap ada.
find /root/work/tmp -name '*.tmp' -print0 | xargs -0 -p rmrm /root/work/tmp/cache-a.tmp /root/work/tmp/cache-b.tmp /root/work/tmp/cache-c.tmp?...nls tmpcache-a.tmp cache-b.tmp cache-c.tmp keep.txtJika memasukkan y, tiga file terhapus dan hanya keep.txt yang tersisa.
find /root/work/tmp -name '*.tmp' -print0 | xargs -0 -p rmrm /root/work/tmp/cache-a.tmp /root/work/tmp/cache-b.tmp /root/work/tmp/cache-c.tmp?...yls tmpkeep.txtJika input kosong, xargs menjalankan perintah sekali tanpa argumen. Jika file kosong diteruskan, rm berjalan tanpa argumen dan muncul error [rm: missing operand]; dengan -r, perintah tidak dijalankan sama sekali.
cat empty.txt | xargs rmrm: missing operand
Try 'rm --help' for more information.cat empty.txt | xargs -r rm5️⃣ Eksekusi paralel, pemisah, dan opsi xargs
🔲 Eksekusi paralel dan pemisah
Jika perintah dijalankan satu per satu, waktunya bertambah seiring banyaknya target. -P menentukan jumlah perintah yang berjalan serentak. Empat sleep yang menunggu 1, 2, 3, dan 4 detik memakan 10 detik jika berurutan, dan selesai dalam 4 detik terlama jika serentak dengan -P 4.
time seq 1 4 | xargs -n 1 sleep
real 0m10.007s
user 0m0.004s
sys 0m0.003stime seq 1 4 | xargs -n 1 -P 4 sleep
real 0m4.005s
user 0m0.001s
sys 0m0.006sJika input dipisahkan simbol selain baris baru atau spasi, tentukan pemisah dengan -d. Jika tiga nama yang dihubungkan koma dipecah dengan -d , setiap nama tampil dalam satu baris.
printf 'alice,bob,carol' | xargs -d , -n 1 echoalice
bob
carolUntuk membaca dari file alih-alih input standar, tulis nama file pada -a. Lima nama di names.txt masuk ke echo tanpa pipe.
xargs -a names.txt echoalice bob carol dave erin🔲 Opsi perintah xargs
📌 Opsi utama: hasil dari artikel ini
| Opsi | Fungsi | Hasil di artikel ini | |
|---|---|---|---|
| -n | Menentukan jumlah argumen untuk satu kali eksekusi perintah | Lima nama dikelompokkan per dua oleh -n 2 dan echo dijalankan tiga kali | |
| -I | Memasukkan satu baris ke placeholder dan menjalankan per baris | Nama masuk ke tempat {}; jika ditulis bersama -n, -I diabaikan dengan peringatan | |
| -L | Menentukan jumlah baris untuk satu kali eksekusi perintah | Pada file dengan satu nama per baris, hasilnya sama dengan -n 2 | |
| -t | Mencetak dulu baris perintah yang akan dijalankan | Baris perintah tampil sebelum output | |
| -0 | Memecah input hanya pada karakter null (bersama find -print0) | Tanpa opsi ini nama berspasi terpecah dengan dua baris error; dengan opsi ini ketiga file menunjukkan 6 baris | |
| -p | Menanyakan untuk setiap perintah apakah akan dijalankan | Jika n tetap ada, jika y tiga file dihapus | |
| -r | Tidak menjalankan perintah jika input kosong | Tanpa opsi ini [rm: missing operand], dengan opsi ini tidak dijalankan | |
| -P | Menentukan jumlah perintah yang berjalan serentak | Empat sleep: 10 detik berurutan, 4 detik dengan -P 4 | |
| -d | Menentukan pemisah untuk memecah input | -d , memberi satu baris per nama | |
| -a | Membaca input dari file, bukan dari input standar | Lima nama di names.txt masuk ke satu echo |
📎 Opsi lainnya: menurut manual resmi
| Opsi | Fungsi | |
|---|---|---|
| -s | Menentukan jumlah karakter maksimum satu baris perintah | |
| -x | Jika melebihi ukuran -s, berakhir tanpa dijalankan | |
| -E | Berhenti membaca input saat bertemu baris yang hanya berisi teks ini | |
| -o | Membuka ulang terminal sebagai input standar perintah (untuk program interaktif) | |
| --process-slot-var | Memasukkan nomor berbeda ke variabel lingkungan untuk tiap perintah serentak |
🔲 Simulator perintah xargs
Di simulator bawah ini Anda dapat mengetik sendiri perintah xargs dan find pada file uji yang sama.
🔢 FAQ & Konten yang Direkomendasikan
Pencarian string
Perintah grep Linux
Perintah grep menemukan baris dalam file yang cocok dengan string dan ekspresi reguler. Gunakan untuk mencari sekaligus di beberapa file yang diteruskan lewat xargs.
Menghapus file
Perintah rm Linux
Artikel tentang perintah rm yang menghapus file dan folder serta bahaya opsi -rf. Periksa opsinya sebelum menaruh rm setelah xargs.
Menghentikan proses
Perintah kill Linux
Perintah kill mengirim sinyal ke nomor proses untuk menghentikannya. Gunakan selanjutnya saat meneruskan daftar nomor proses lewat xargs untuk menghentikannya.
ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.