Cara Menggunakan xargs di bash/shell Linux

xargs dapat mengambil output dari perintah lain, dan menjadikan sebagai parameter input dari proses tersebut.

Data stream di Linux terdiri dari, standard input stream (stdin), standard output stream (stdout), dan standard error stream (stderr). Baik stdin, stdout, dan stderr semua dalam bentuk text. 

Keunggulan dari Linux, dengan bantuan pipe command ( | ) dapat mengirim stdout menjadi stdin hanya dalam 1 perintah.

xargs, selain menerima input dari pipe command, juga dapat menerima input dari text file. Hal paling lazim adalah menyandingkan perintah awk untuk memformat output dengan xargs.

Contoh Penggunaan xargs pada syntax docker:

Berikut ini syntax docker beserta tampilan output dari perintah tersebut

docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*"

Dari hasil output tersebut, kita coba pipe dengan xargs

docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*" | xargs

1
2
3
[root@ip-xxxxx ~]# docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*" | xargs
REPOSITORY TAG IMAGE ID CREATED SIZE asia-southeast2-docker.pkg.dev/prj-stg-services4b4bb6/ism-repo/ecm-admin-bo stg3-24 664b8a19b016 5 days ago 400MB asia-southeast2-docker.pkg.dev/prj-stg-services4b4bb6/ism-repo/ecm-admin-bo-web stg3-24 d6bc4fa5e3db 7 days ago 179MB
[root@ip-xxxxx ~]#

Misalkan, kita ingin membuat script untuk menghapus seluruh image docker dalam 1 line, bisa  

docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*" | awk '{print $1 ":" $2}'| tail -n +2 | xargs docker rmi

Dengan menambahkan awk '{print $1 ":" $2}' maka output yang akan dikirim ke xargs adalah hanya kolom 1 dan 2, atau kolom repository dan kolom tag. Sedangkan fungsi tail -n +2 hanya untuk melewati baris 1 atau judul kolom.

Gunakan xargs dengan Konfirmasi

Jika tanpa adanya tambahan argumen maka, setiap syntax dijalankan, maka linux akan menjalankan seluruh script tanpa pemberitahuan.

Gunakan argumen -p agar script tidak dijalankan, sebelum menerima respon 'y' atau 'Y'. Selain itu akan dianggap dengan n.

echo 'satu dua tiga' | xargs -p touch

1
2
3
[root@ip-xxxxx ~]# echo 'satu dua tiga' | xargs -p touch
touch satu dua tiga ?...
[root@ip-xxxxx ~]#


Gunakan xargs dengan Multiple Command

Kita dapat menggunakan multiple command pada xargs, dengan menambahkan argumen -I. Dengan adanya -I (initial arguments atau dikenal juga replace-string) maka setiap simbol yang didefinisikan, akan digantikan nilainya dari hasil output. 

1
2
3
4
5
[root@ip-xxxxx tes]# more dir.txt 
dir_satu
dir_dua
dir_tiga
[root@ip-xxxxx tes]#

more dir.txt | xargs -I % sh -c 'echo %; mkdir %'

Jika dijabarkan, berikut arti dari script tersebut:

  • more dir.txt -- push content dari dir.txt sebagai argumen xargs
  • xargs -I % -- string simbol yang didefinisikan adalah tanda %
  • sh -c -- jalankan perintah shell
  • echo %; mkdir % -- setiap tanda % akan digantikan dengan nilai dari content dir.txt

Penggunaan xargs begitu luas. xargs dapat disandingkan dengan setiap perintah yang ada di Linux.

Komentar

Postingan populer dari blog ini

Cara membuat alias Bash permanen di Linux/Unix

Compress dan Extract File Menggunakan Tar di Bash Linux