xargs adalah perintah yang memungkinkan Anda mengirim output dari satu perintah sebagai parameter ke perintah lain, membuat perintah seperti echo, rm, dan mkdir menerima input standar sebagai argumen. xargs dapat digunakan dengan perintah lain seperti wc untuk menghitung kata, karakter, dan baris dengan mudah dalam banyak file. xargs dapat digunakan untuk menyalin file ke beberapa lokasi, menghapus file di direktori bersarang, dan membuat file arsip menggunakan perintah find.
Perlu merangkai beberapa perintah Linux, tetapi salah satunya tidak menerima input yang disalurkan? xargs adalah perintah untuk Anda.
Mengapa Menggunakan Perintah xargs?
Perintah xargs digunakan untuk membangun alur eksekusi menggunakan aliran data standar. Dengan kata lain, Anda dapat menggunakan xargs untuk mengirim output dari satu perintah ke perintah lain sebagai parameter.
Semua utilitas Linux standar memiliki tiga aliran data yang terkait dengannya. Mereka adalah aliran masukan standar (stdin), aliran keluaran standar (stdout), dan aliran kesalahan standar (stderr). Dengan menggunakan xargs kita dapat membuat perintah seperti echo, rm, dan mkdir menerima input standar sebagai argumen.
Aliran ini berfungsi dengan teks. Kami mengirimkan masukan (stdin) ke perintah menggunakan teks, dan respons (stdout) ditulis ke jendela terminal sebagai teks. Pesan kesalahan juga ditulis ke jendela terminal sebagai teks (stderr).
Salah satu fitur hebat sistem operasi Linux dan Unix adalah kemampuan untuk menyalurkan output stdout dari satu perintah ke input stdin dari perintah kedua. Perintah pertama tidak peduli bahwa outputnya tidak masuk ke jendela terminal, dan perintah kedua tidak peduli bahwa inputnya tidak berasal dari keyboard.
Meskipun semua perintah Linux memiliki tiga aliran standar, bukan semuanya menerima stdout perintah lain sebagai masukan ke stdin mereka. Itu berarti Anda tidak dapat menyalurkan masukan ke perintah tersebut.
Di situlah fungsi xargs. Kami telah membahas beberapa contoh perintah xargs yang berguna — silakan lewati sedikit. Contohnya belum tentu saling melengkapi.
Perintah xargs
xargs akan menerima input yang disalurkan. Itu juga dapat menerima input dari file. xargs menggunakan masukan itu sebagai parameter untuk perintah yang telah kami perintahkan untuk digunakan. Jika kita tidak memberi tahu xargs untuk bekerja dengan perintah tertentu maka secara default akan menggunakan echo.
Kita dapat menggunakannya untuk mendemonstrasikan bagaimana xargs akan selalu menghasilkan satu baris keluaran, bahkan dari masukan multi-baris.
Jika kita menggunakan -1 ( daftar satu file per baris) opsi dengan ls, kita mendapatkan satu kolom nama file.
ls -1 ./*.sh
Ini mencantumkan file skrip shell di direktori saat ini.
Kami mendapatkan satu kolom seperti yang diharapkan. Jika kita menyalurkannya melalui xargs apa yang kita dapatkan?
ls -1 ./*.sh | xargs
Outputnya ditulis ke jendela terminal, sebagai satu aliran teks yang panjang.
Kemampuan inilah yang memungkinkan xargs memasukkan parameter ke perintah lain.
Menggunakan xargs Dengan wc
Kita dapat menggunakan xargs untuk dengan mudah membuat wc menghitung kata, karakter, dan baris dalam beberapa file.
ls *.halaman | xargs wc
Inilah yang terjadi:
ls mencantumkan file *.page dan meneruskan daftar tersebut ke xargs. xargs meneruskan nama file ke wc. wc memperlakukan nama file seolah-olah telah menerimanya sebagai parameter baris perintah.
Statistik untuk setiap file ditampilkan bersama dengan total keseluruhan.
Menggunakan xargs Dengan Konfirmasi
Kita dapat menggunakan opsi -p (interaktif) agar xargs meminta konfirmasi kepada kami bahwa kami dengan senang hati melanjutkannya.
Jika kami meneruskan serangkaian nama file untuk menyentuh, melalui xargs, sentuh akan membuat file untuk kita.
echo 'satu dua tiga' | xargs -p touch
Perintah yang akan dijalankan ditampilkan dan xargs menunggu kita merespons dengan mengetikkan “y” atau “Y”, atau “n” atau “N”, dan menekan Enter.
Jika Anda cukup menekan Enter, maka diperlakukan sebagai “n”. Perintah ini hanya dijalankan jika Anda mengetik “y” atau “Y”.
Kami menekan “y” dan menekan Enter. Kita dapat menggunakan ls untuk memeriksa apakah file telah dibuat.
ls satu dua tiga
Menggunakan xargs Dengan Banyak Perintah
Kita dapat menggunakan beberapa perintah dengan xargs dengan menggunakan opsi -I (argumen awal).
Opsi ini mendefinisikan “string pengganti”. Di mana pun token untuk string pengganti muncul di baris perintah, nilai yang diberikan ke xargs akan disisipkan.
Mari gunakan perintah pohon untuk melihat subdirektori dari direktori saat ini. Opsi -d (direktori) menyebabkan pohon mengabaikan file dan hanya melaporkan direktori.
tree -d
Ada satu subdirektori bernama “gambar.”
Dalam file bernama “directories.txt”, kami memiliki nama beberapa direktori yang kami inginkan telah dibuat. Kita dapat melihat isinya menggunakan direktori cat.
cat.txt
Kita akan menggunakan ini sebagai data input untuk xargs. Perintah yang akan kita gunakan adalah ini:
cat direktori.txt | xargs -I % sh -c 'echo %; mkdir %'
Direktori terdaftar satu per satu.
Kita dapat menggunakan pohon sekali lagi untuk memverifikasi direktori telah dibuat.
tree -d
Menyalin File Ke Beberapa Lokasi
Kita dapat menggunakan xargs untuk memungkinkan kita menyalin file ke beberapa lokasi dengan satu perintah.
Kita akan pergi untuk menyalurkan nama dua direktori ke xargs sebagai parameter input. Kami akan memberi tahu xargs untuk hanya meneruskan salah satu parameter ini pada satu waktu ke perintah yang digunakannya.
Dalam hal ini, perintahnya adalah cp. Jadi efeknya adalah memanggil cp dua kali, setiap kali dengan salah satu dari dua direktori sebagai parameter baris perintah. Parameter xargs yang memungkinkan hal ini terjadi adalah opsi -n (angka maksimal). Kami akan mengatur ini menjadi satu.
Kami juga menggunakan opsi -v (verbose) dengan cp sehingga melaporkan apa yang terjadi.
echo ~/Backups/ ~/Documents/page-files/ | xargs -n 1 cp -v ./*.page
File disalin ke dua direktori, satu direktori pada satu waktu. cp melaporkan setiap tindakan penyalinan file sehingga kita dapat melihatnya terjadi.
Menghapus File di Direktori Bersarang
Jika nama file memiliki spasi dan karakter aneh di dalamnya—seperti karakter baris baru— xargs tidak akan dapat menafsirkannya dengan benar. Kita dapat mengatasi masalah tersebut dengan menggunakan opsi -0 (null terminator). Ini memberitahu xargs untuk menggunakan karakter null sebagai pembatas terakhir untuk nama file.
Kita akan menggunakan find dalam contoh ini. find memiliki opsi sendiri untuk menangani spasi dan karakter aneh dalam nama file. Ini adalah opsi -print0 (nama lengkap, karakter nol).
find . -nama "*.png" -ketik f -print0 | xargs -0 rm -v -rf "{}"
Ini rusak seperti ini:
find . -name “*.png”: find akan mencari dari direktori saat ini “.” untuk objek dengan nama yang cocok dengan “*.png” yaitu file (ketik -f). -print0: nama akan diakhiri dengan karakter nol, dan spasi serta karakter aneh akan dipenuhi. xargs -0: xargs juga akan menganggap nama file diakhiri dengan null, dan spasi serta karakter aneh tidak akan menimbulkan masalah. rm -v -rf “{}”: rm akan bertele-tele dan melaporkan apa yang terjadi (-v). Ini akan menjadi rekursif (-r) dan memeriksa subdirektori bersarang, dan akan menghapus file tanpa disuruh (-f). “{}” diganti dengan setiap nama file.
Semua subdirektori dicari, dan file yang cocok dengan pola pencarian akan dihapus.
Menghapus Direktori Bersarang
Misalnya kita ingin menghapus sekumpulan subdirektori bersarang. tree akan membiarkan kita melihatnya.
tree -d
find . -nama "level_one" -ketik d printo | xargs -o rm -v -rf "{}"
Perintah ini akan menggunakan find untuk mencari secara rekursif dalam direktori saat ini. Target pencariannya adalah direktori bernama “level_one”. Nama direktori diteruskan melalui xargs ke rm.
Satu-satunya perubahan signifikan antara perintah ini dan perintah sebelumnya adalah, istilah pencarian adalah nama direktori paling atas, dan -type d memberitahu find untuk mencari direktori, bukan file.
Nama dari setiap direktori dicetak saat dihapus. Kita dapat memeriksa dengan pohon :
tree -d
Semua subdirektori bersarang dihapus.
Menghapus Semua File, Kecuali Satu Jenis File
Kita dapat menggunakan find, xargs dan rm untuk menghapus semua file selain dari satu jenis yang ingin kita pertahankan. Ini sedikit berlawanan dengan intuisi, tapi kami memberikan nama jenis file yang ingin kami simpan, bukan nama file yang ingin kami hapus.
Opsi -not memberitahu find untuk mengembalikan nama file yang tidak cocok dengan pencarian pola. Kami menggunakan opsi -I (argumen awal) dengan xargs sekali lagi. Kali ini token pengganti string yang kita definisikan adalah “{}”. Ini akan berperilaku persis sama dengan token replace-string yang kita buat sebelumnya, yang kebetulan merupakan “%”.
find . -ketik f -bukan - nama "*.sh" -print0 | xargs -0 -I {} rm -v {}
Kita bisa mengeceknya dengan ls. Satu-satunya file yang tersisa di direktori adalah file yang cocok dengan pola pencarian “*.sh”.
ls -l
Membuat File Arsip Dengan Xargs
Kita dapat menggunakan find untuk mencari file dan meneruskannya melalui xargs ke tar, untuk membuat file arsip .
Kami akan mencari di direktori saat ini. Pola pencariannya adalah “*.page” jadi kita akan mencari file “.page”.
find ./ - name "*.page" -type f -print0 | xargs -0 -tar -cvzf page_files.tar.gz
File terdaftar seperti yang diharapkan, saat file arsip dibuat.
Mediator Data
Terkadang Anda memerlukan sedikit perancah saat Anda menumpuk semuanya. xargs menjembatani kesenjangan antara perintah yang dapat mengeluarkan informasi dan perintah yang tidak dibuat untuk menerimanya.
Baik xargs maupun find memiliki banyak opsi. Anda dianjurkan untuk memeriksa halaman manual mereka untuk mempelajari lebih lanjut.