utilitas xargs memungkinkan Anda membangun dan menjalankan perintah dari input standar.

Xargs biasanya digunakan dalam kombinasi dengan perintah lain melalui piping (|). Menggunakan xargs memungkinkan Anda untuk memberikan input standar sebagai argumen untuk utilitas baris perintah seperti mkdir dan rm.

Dalam tutorial ini, kami akan membahas dasar-dasar penggunaan perintah xargs.

Cara Menggunakan Perintah Linux xargs

Xargs membaca argumen dari input standar, dipisahkan oleh spasi atau baris baru, dan mengeksekusi perintah yang ditentukan menggunakan input sebagai argumen perintah. Jika tidak ada perintah yang diberikan, standarnya adalah /bin/echo.

Sintaks untuk perintah xargs adalah sebagai berikut:

xargs [OPTIONS] [COMMAND [initial-arguments]]

Contoh paling dasar dari menggunakan xargs adalah untuk melewatkan beberapa string yang dipisahkan dengan spasi menggunakan pipe ke xargs dan menjalankan perintah yang akan menggunakan string tersebut sebagai argumen.

echo "file1 file2 file3" | xargs touch

Pada contoh di atas, kita akan piping input standar ke xargs dan perintah touch dijalankan untuk setiap argumen, sehingga membuat tiga file. Ini sama seperti jika Anda menjalankan:

touch file1 file2 file3

Cara Melihat Command dan Prompt User

Untuk mencetak perintah pada terminal sebelum menjalankannya gunakan opsi -t (--verbose):

echo  "file1 file2 file3" | xargs -t touch
touch file1 file2 file3

Jika Anda ingin memunculkan peringatan sebelum menjalankan setiap perintah, gunakan opsi -p (--interactive):

echo  "file1 file2 file3" | xargs -p touch

Ketik y atau Y untuk konfirmasi dan menjalankan perintah :

touch file1 file2 file3 ?...y

Penggunaan peringatan dan konfirmasi ini sangat berguna jika ingin menggunakan perintah yang berbahaya.

Cara Membatasi Jumlah Argumen

Secara default jumlah argumen yang diteruskan ke perintah ditentukan oleh batas sistem.

Opsi -n (--max-args) menentukan jumlah argumen untuk diteruskan ke perintah yang diberikan. Xargs akan menjalankan perintah yang ditentukan sebanyak yang diperlukan sampai semua argumen habis.

Dalam contoh berikut, jumlah argumen yang dibaca dari input standar dibatasi hanya 1.

echo  "file1 file2 file3" |  xargs -n 1 -t touch

Seperti yang dapat Anda lihat dari output verbose di bawah ini, perintah touch dijalankan secara terpisah untuk setiap argumen:

touch file1
touch file2
touch file3

Cara Menjalankan Banyak Perintah

Untuk menjalankan banyak perintah dengan xargs, gunakan opsi -I. Ia bekerja dengan mendefinisikanreplace-str setelah switch-I dan kemudian semua output darireplace-str diganti dengan argumen yang diteruskan ke xargs.

Contoh xargs berikut akan menjalankan dua perintah, pertama itu akan membuat file menggunakan touch dan kemudian akan membuat daftar file dengan perintah ls:

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'
-rw-r--r-- 1 linuxid users 0 May  6 11:54 file1
-rw-r--r-- 1 linuxid users 0 May  6 11:54 file2
-rw-r--r-- 1 linuxid users 0 May  6 11:54 file3

Pilihan umum untuk replace-str adalah %, namun, Anda dapat menggunakan placeholder lain, misalnyaARGS:

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Cara Menentukan delimiter (pembatas)

Gunakan opsi -d (--delimiter) untuk mengatur pembatas khusus yang bisa berupa karakter tunggal atau urutan pelarian dimulai dengan \.

Contoh berikut ini kita akan gunakan ; sebagai delimiter:

echo  "file1;file2;file3" | xargs -d \; -t touch
touch file1 file2 file3

Cara Membaca Item dari File

Perintah xargs juga dapat membaca item dari file alih-alih input standar. Untuk melakukannya gunakan opsi -a (--arg-file) diikuti dengan nama file.

Pada contoh berikut, perintah xargs akan membaca file ips.txt dan melakukan ping setiap Alamat IP.

8.8.8.8
1.1.1.1

We are also using the -L 1 option which instructs xargs to read one line at the time. If this option is omitted xargs will pass all IPs to a single ping command.

xargs -t -L 1 -a ips.txt ping -c 1
ping -c 1 8.8.8.8 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms

...
ping -c 1 1.1.1.1 
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

Menggabungkan xargs dengan find

xargs paling sering digunakan dalam kombinasi dengan perintah find. Anda dapat menggunakan find untuk mencari file tertentu dan kemudian menggunakan xargs untuk melakukan operasi pada file tersebut.

Untuk menghindari masalah dengan nama file yang mengandung baris baru atau karakter khusus lainnya selalu gunakan opsi -print0 yang akan memberikan perintah pada find untuk mencetak nama file lengkap diikuti oleh karakter nol. Output ini dapat ditafsirkan dengan benar oleh xargs menggunakan opsi -0, (--null).

Dalam contoh berikut, find akan mencetak nama lengkap semua file di dalam direktori /var/www/.cache dan xargs akan meneruskan path file ke perintah rm:

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Menggunakan xargs untuk Memangkas Karakter Spasi

Xargs juga dapat digunakan sebagai alat untuk menghapus spasi kosong dari kedua sisi string yang diberikan. Cukup pipe string ke perintah xargs dan perintah akan melakukan pemangkasan:

echo "  Long line " | xargs
Long line

Penggunaan metode ini berguna ketika membandingkan string dalam skrip shell.

#!/bin/bash

VAR1=" Linuxid"
VAR2="Linuxid"

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

output :

Strings are not equal.
Strings are equal.

Kesimpulan

Sekarang Anda telah memiliki pemahaman yang baik tentang bagaimana menggunakan perintah xargs diLinux. Untuk informasi lebih rinci tentang setiap opsi xargs, baca halaman manual xargs.