Perintah xargs: Cara Pakai, Opsi -n dan -I, dan Penggunaan dengan find

Lingkungan ujiKeluarga RHELAlmaLinux 9.8akun rootDiperiksa 2026-10-29

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

  • ↪️ Input standar menjadi argumen perintah

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.txt
alice
bob
carol
dave
erin

Jika output cat diteruskan ke xargs echo, lima baris menjadi argumen satu echo dan tampil dalam satu baris.

cat names.txt | xargs echo
alice bob carol dave erin

Jika tidak ada perintah di belakangnya, xargs menjalankan echo, jadi hasilnya sama.

cat names.txt | xargs
alice bob carol dave erin

Pipe 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.txt
logs/access.log
logs/error.log
tmp/keep.txt
cat list.txt | wc -l
3

Dengan 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 total

2️⃣ Opsi xargs -n dan -I

  • ↪️ Ukuran kelompok, posisi argumen, dan pemeriksaan -t

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.

🧩 Cara xargs mengelompokkan input standar menjadi argumen perintah
Diagram penjelasan
⚙️ Opsi
$ cat names.txt | xargs echo
$ cat names.txt | xargs -n 2 echo
$ cat names.txt | xargs -I {} echo 'user: {}'
① Input standar (names.txt)alicebobcaroldaveerinSatu nama per baris, lima baris.
② Mengelompokkan menjadi argumenalicebobcaroldaveerinTanpa opsi, kelimanya menjadi satu kelompok.alicebobcaroldaveerin-n 2 mengelompokkan per dua, dan sisanya dikelompokkan sendiri.alicebobcaroldaveerin-I {} menjadikan satu baris satu kelompok dan memasukkannya ke tempat {}.
③ Perintah yang dijalankan dan outputecho alice bob carol dave erinalice bob carol dave erinecho dijalankan sekali.echo alice bobecho carol daveecho erinecho dijalankan tiga kali, satu baris per kelompok.echo 'user: alice' echo 'user: bob' … lima kali dalam bentuk yang sama sampai erinuser: aliceuser: bobuser: caroluser: daveuser: erinecho dijalankan lima kali, nama masuk ke tempat {}.
Tanpa opsi, xargs menempelkan semua kata dari input sebagai argumen satu kali eksekusi. Lima nama masuk ke satu echo dan tampil dalam satu baris.
Dengan -n 2, kata dikelompokkan per dua dan perintah diulang. Lima nama menjadi tiga kelompok, jadi echo dijalankan tiga kali.
Dengan -I {}, satu baris dihitung sebagai satu kesatuan dan masuk ke tempat {} dalam perintah, yang dijalankan per baris. Gunakan ini saat argumen harus berada di tempat selain paling akhir.

-n 1 menjalankan echo untuk tiap nama sehingga tampil lima baris.

cat names.txt | xargs -n 1 echo
alice
bob
carol
dave
erin

-n 2 mengelompokkan per dua dan meneruskan sisanya terpisah.

cat names.txt | xargs -n 2 echo
alice bob
carol dave
erin

Untuk melihat perintah yang dijalankan, tambahkan -t. Baris perintah tampil lebih dulu dan output-nya di bawahnya.

cat names.txt | xargs -t -n 2 echo
echo alice bob
alice bob
echo carol dave
carol dave
echo erin
erin

Jika 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: erin
cat names.txt | xargs -I {} echo '{} -> home/{}'
alice -> home/alice
bob -> home/bob
carol -> home/carol
dave -> home/dave
erin -> home/erin

Dengan 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 home
cat names.txt | xargs -I {} mkdir home/{}
ls home
alice  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 echo
alice bob
carol dave
erin

3️⃣ Kombinasi find dan xargs

  • ↪️ Meneruskan nama file berspasi dengan -print0 dan -0

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.log

Saat 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 total

Opsi -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 total

Untuk 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.log

4️⃣ Menghapus file dengan perintah xargs

  • ↪️ Melihat dulu dengan echo dan memastikan dengan -p

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 rm
rm /root/work/tmp/cache-a.tmp /root/work/tmp/cache-b.tmp /root/work/tmp/cache-c.tmp
ls tmp
cache-a.tmp  cache-b.tmp  cache-c.tmp  keep.txt

Dengan -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 rm
rm /root/work/tmp/cache-a.tmp /root/work/tmp/cache-b.tmp /root/work/tmp/cache-c.tmp?...n
ls tmp
cache-a.tmp  cache-b.tmp  cache-c.tmp  keep.txt

Jika memasukkan y, tiga file terhapus dan hanya keep.txt yang tersisa.

find /root/work/tmp -name '*.tmp' -print0 | xargs -0 -p rm
rm /root/work/tmp/cache-a.tmp /root/work/tmp/cache-b.tmp /root/work/tmp/cache-c.tmp?...y
ls tmp
keep.txt

Jika 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 rm
rm: missing operand
Try 'rm --help' for more information.
cat empty.txt | xargs -r rm

5️⃣ Eksekusi paralel, pemisah, dan opsi xargs

  • ↪️ Opsi -P, -d, dan -a

🔲 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.003s
time seq 1 4 | xargs -n 1 -P 4 sleep

real	0m4.005s
user	0m0.001s
sys	0m0.006s

Jika 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 echo
alice
bob
carol

Untuk 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 echo
alice bob carol dave erin

🔲 Opsi perintah xargs

📌 Opsi utama: hasil dari artikel ini

OpsiFungsiHasil di artikel ini
-nMenentukan jumlah argumen untuk satu kali eksekusi perintahLima nama dikelompokkan per dua oleh -n 2 dan echo dijalankan tiga kali
-IMemasukkan satu baris ke placeholder dan menjalankan per barisNama masuk ke tempat {}; jika ditulis bersama -n, -I diabaikan dengan peringatan
-LMenentukan jumlah baris untuk satu kali eksekusi perintahPada file dengan satu nama per baris, hasilnya sama dengan -n 2
-tMencetak dulu baris perintah yang akan dijalankanBaris perintah tampil sebelum output
-0Memecah 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
-pMenanyakan untuk setiap perintah apakah akan dijalankanJika n tetap ada, jika y tiga file dihapus
-rTidak menjalankan perintah jika input kosongTanpa opsi ini [rm: missing operand], dengan opsi ini tidak dijalankan
-PMenentukan jumlah perintah yang berjalan serentakEmpat sleep: 10 detik berurutan, 4 detik dengan -P 4
-dMenentukan pemisah untuk memecah input-d , memberi satu baris per nama
-aMembaca input dari file, bukan dari input standarLima nama di names.txt masuk ke satu echo

📎 Opsi lainnya: menurut manual resmi

OpsiFungsi
-sMenentukan jumlah karakter maksimum satu baris perintah
-xJika melebihi ukuran -s, berakhir tanpa dijalankan
-EBerhenti membaca input saat bertemu baris yang hanya berisi teks ini
-oMembuka ulang terminal sebagai input standar perintah (untuk program interaktif)
--process-slot-varMemasukkan 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.

Simulator perintah xargsGNU findutils 4.8
[root@server work]#
Gunakan tombol ↑↓ pada keyboard untuk memanggil kembali perintah yang diketik sebelumnya.

🔢 FAQ & Konten yang Direkomendasikan

Jika nomor proses diteruskan, kill mengirim sinyal ke nomor itu. Saat nomor proses sleep 600 yang berjalan di latar belakang diambil dengan variabel shell $! lalu diteruskan ke xargs kill, [Terminated sleep 600] tersisa di daftar tugas dan tugas itu hilang pada jobs berikutnya. Saat mengumpulkan daftar nomor dengan perintah lain, cetak dulu proses apa saja yang termasuk sebelum meneruskannya.

Opsi --show-limits mencetak batasnya. Di server yang diuji, batas atas POSIX panjang baris perintah adalah 2,093,890 byte, dan buffer perintah yang benar-benar dipakai xargs adalah 131,072 byte. Menurut manual, jika input lebih panjang dari buffer ini, xargs memecah perintah menjadi beberapa eksekusi.

Jika satu saja perintah yang dijalankan xargs gagal dengan kode antara 1 dan 125, kode keluar xargs menjadi 123. Eksekusi wc dengan nama file terpecah dan rm dengan input kosong sama-sama 123, sedangkan perintah yang tidak ditemukan menghasilkan 127. Jadikan nilai ini acuan saat memeriksa kode keluar setelah xargs di skrip shell.

ℹ️ 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.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 10   +   4   =