GNU/Linux >> Belajar Linux >  >> Linux

8 Contoh Praktis Perintah Linux Xargs untuk Pemula

Linux xargs command mungkin bukan alat baris perintah yang sangat populer, tetapi ini tidak menghilangkan fakta bahwa itu sangat berguna, terutama bila dikombinasikan dengan perintah lain seperti find dan grep . Jika Anda baru mengenal xargs dan ingin memahami penggunaannya, Anda akan senang mengetahui bahwa itulah tepatnya yang akan kami lakukan di sini.

Before we proceed, please keep in mind that all the examples presented in this tutorial have been tested on Ubuntu 18.04 LTS (Bionic Beaver). Shell used is Bash, and version is 4.4.19.

1. Bagaimana cara kerja perintah Xargs?

Nah, sebelum melompat ke penggunaannya, penting untuk memahami apa sebenarnya yang dilakukan Xargs. Dalam istilah awam, alat - dalam bentuk paling dasar - membaca data dari input standar (stdin) dan menjalankan perintah (disediakan sebagai argumen) satu kali atau lebih berdasarkan input yang dibaca. Kosong dan spasi apa pun dalam input diperlakukan sebagai pembatas, sedangkan baris kosong diabaikan.

Jika tidak ada perintah yang diberikan sebagai argumen ke xargs, perintah default yang dijalankan alat ini adalah echo . Misalnya, dalam contoh berikut, saya baru saja menjalankan 'xargs' dan memasukkan 'Hello World' di stdin. Saat saya menekan Ctrl+D (untuk memberi tahu xargs bahwa kita sudah selesai dengan input), echo perintah dijalankan secara otomatis, dan 'Hello World' dicetak lagi.

2. Bagaimana cara menggunakan xargs dengan perintah lain?

Sementara gema adalah perintah default yang dijalankan xargs, Anda dapat secara eksplisit menentukan perintah lainnya. Misalnya, Anda dapat meneruskan perintah find bersama dengan opsi '-name' sebagai argumen ke xargs, lalu meneruskan nama file (atau jenis file) yang ingin Anda temukan untuk mencari sebagai input melalui stdin.

Berikut perintah lengkap yang dimaksud:

xargs find -name

Misalnya, kami memberikan "*.txt" di input melalui stdin, yang berarti kami ingin menemukan perintah untuk mencari semua file .txt di direktori saat ini (serta subdirektorinya).

Inilah perintah yang sedang beraksi:

3. Cara membuat xargs mengeksekusi perintah beberapa kali (sekali untuk setiap baris/argumen input)

Pada contoh yang telah kita bahas di bagian sebelumnya, kami ingin mencari file .txt, jadi kami menyediakan "*.txt" di input. Tetapi bagaimana jika persyaratannya adalah juga mencari jenis file lain, seperti .log dan .tmp?

Coba berikan ini sebagai input ke xargs setelah "*.txt" dan lihat apa yang terjadi. Nah, Anda akan mendapatkan kesalahan yang mirip dengan berikut ini:

Itu karena xargs meneruskan "*.txt" dan "*.log" sebagai input nama file ke find perintah dan kemudian temukan gagal saat dijalankan dengan dua nama file di input. Anda dapat memikirkan perintah find yang berjalan dengan cara berikut:

find -name "*.txt" "*.log"

Dan itu bukan cara yang benar.

Yang kita inginkan adalah bahwa perintah xargs pertama-tama harus meneruskan "*.txt" ke find perintah, sehingga menemukan memberi kami hasil yang terkait dengan file .txt, dan kemudian "*.log" diteruskan. Ini dapat dilakukan dengan menggunakan -L opsi baris perintah yang disediakan xargs.

-L opsi baris perintah memerlukan nomor yang diperlakukan sebagai jumlah maksimum baris tidak kosong yang harus diteruskan sebagai masukan ke perintah dalam satu waktu. Jadi, dalam kasus kami, nilai itu akan menjadi 1, karena kami ingin satu baris input diteruskan sebagai input ke find sekaligus.

Jadi, inilah perintah yang harus kita jalankan:

xargs -L 1 find -name

Tangkapan layar berikut menunjukkan perintah yang disebutkan di atas beraksi:

Sejauh ini baik. Tetapi bagaimana jika Anda memberikan input dengan cara berikut:

"*.txt" "*.log"

Nah, perintah akan gagal karena '-L 1' akan memastikan baris lengkap diteruskan ke find perintah.

Dalam situasi seperti ini, Anda dapat menggunakan opsi baris perintah '-n'.

Opsi baris perintah '-n', seperti '-L', memerlukan angka yang akan mewakili jumlah argumen yang ingin Anda lewati xargs per baris perintah. Dalam kasus ini, kita baru saja membahas, "*.txt" dan "*.log" harus menjadi argumen yang berbeda, dan karena kita ingin keduanya diteruskan satu per satu, kita harus memberikan '1' sebagai nilai untuk '-n' .

xargs -n 1 temukan -nama

Jadi, inilah cara agar xargs menjalankan perintah beberapa kali.

4. Cara membuat xargs menangani nama file dengan spasi

Jika Anda ingat, pada awalnya, kami menyebutkan bahwa xargs memperlakukan spasi kosong (serta karakter baris baru) sebagai pembatas. Ini dapat menyebabkan masalah jika nama file yang diteruskan sebagai input ke xargs mengandung spasi.

Misalnya, direktori saat ini berisi file bernama 'new music.mp3', dan Anda ingin xargs meneruskan nama ini ke mplayer sehingga yang terakhir dapat memutar file. Jika Anda menggunakan cara konvensional, Anda akan mendapatkan kesalahan:

Itu karena karena ruang antara 'baru' dan 'music.mp3', ini diperlakukan sebagai dua file yang berbeda oleh mplayer. Salah satu cara untuk mengatasi masalah ini adalah dengan menggunakan garis miring terbalik sambil memberikan input:

new\ music.mp3

Cara lainnya adalah dengan mengubah pembatas, yang dapat Anda lakukan menggunakan -d pilihan. Misalnya, Anda dapat meminta xargs untuk hanya mempertimbangkan baris baru sebagai pembatas, sesuatu yang dapat dilakukan dengan cara berikut:

xargs -d '\n' mplayer

5. Cara membuat xargs menangani nama file dengan karakter baris baru

Jadi, sekarang kita tahu bagaimana kita bisa membuat xargs menangani nama file yang mengandung spasi putih. Tapi bagaimana dengan baris baru? Ya, nama file juga dapat memiliki karakter baris baru. Misalnya, ada file bernama 'foo'[newline]'file.txt'. Di terminal, nama ditampilkan sebagai 'foo?file.txt'.

Sekarang, misalkan, saya ingin menemukan perintah untuk menemukan semua file dengan nama yang dimulai dengan teks 'foo', lalu gunakan xargs untuk membuka file ini di gedit . Berikut perintahnya:

find . -name "foo*" | xargs gedit

Sayangnya, perintah tersebut gagal mencapai tujuannya karena file baru dengan nama 'foo' terbuka di Gedit. Itu mungkin karena karakter baris baru diperlakukan sebagai pembatas oleh xargs.

Untuk menyelesaikan masalah ini, gunakan -print0 opsi yang menemukan penawaran dan memasangkannya dengan -0 xarg's pilihan. Begini cara halaman manual find menjelaskan opsi ini:

 -print0
True; print the full file name on the standard output, followed by a null character (instead of thenewline character that -print uses). This allows file names that contain newlines or other types ofwhite space to be correctly interpreted by programs that process the find output. This option corresponds to the -0 option of xargs.

Jadi, inilah perintah yang harus kita gunakan:

find . -name "foo*" -print0 | xargs -0 gedit

6. Cara menemukan file yang berisi teks tertentu

Perintah xargs sangat berguna jika Anda ingin mencari file yang berisi teks/string tertentu. Misalnya, jika Anda ingin mencari file .txt yang berisi teks 'abc', maka dapat dilakukan dengan cara berikut:

find -name "*.txt" | xargs grep "abc"

Inilah perintah yang sedang beraksi:

Seperti yang cukup jelas, dalam kasus ini, perintah xargs mendapatkan inputnya dari find perintah.

7. Cara membuat xargs menerima input dari file 

Sejauh ini, kita telah melihat xargs menerima input dari stdin (yang merupakan perilaku default) serta dari perintah lain (dibahas di bagian terakhir). Namun, jika mau, Anda juga dapat meminta xargs menerima input dari sebuah file.

Perintah -a opsi memungkinkan Anda melakukan ini. Opsi ini mengharapkan nama file - ini akan menjadi file dari mana xargs akan membaca input.

Misalnya, ada file dengan nama 'input.txt'. Ini berisi input untuk xargs (pada dasarnya, isinya adalah dua nama file:testfile1.txt dan testfile2.txt). Inilah cara xargs dapat digunakan untuk membaca input dari file ini, dan meneruskannya ke perintah lain, misalnya ls .

xargs -a input.txt ls -lart

Inilah perintah yang sedang beraksi:

8. Cara membuat xargs meminta izin pengguna sebelum menjalankan perintah

Kami telah membahas bagaimana Anda dapat membuat xargs menjalankan perintah beberapa kali (lihat poin 3 di atas). Tetapi bagaimana jika Anda ingin xargs meminta izin Anda setiap kali menjalankan perintah? Apakah ini mungkin? Ya, itu - -p opsi baris perintah memungkinkan.

Berikut adalah contoh cara menjalankan xargs dalam mode interaktif:

Kami baru saja menggores permukaan di sini karena ada banyak fitur lain yang disediakan oleh perintah xargs dalam bentuk opsi baris perintah. Cobalah konsep/fitur xargs yang telah kami jelaskan dalam tutorial ini, dan jika ada keraguan atau pertanyaan, buka halaman manualnya.


Linux
  1. Tutorial perintah cd Linux untuk pemula (8 Contoh)

  2. Perintah killall Linux untuk Pemula (8 Contoh)

  3. Contoh Perintah xargs di Linux

  1. 10 Contoh Perintah 'rm' untuk Pemula Linux

  2. 10 Contoh Perintah Linux Cat untuk Pemula

  3. Tutorial perintah comm Linux untuk pemula (5 contoh)

  1. Perintah dir Linux untuk pemula (10 contoh)

  2. Perintah Linux rm Dijelaskan untuk Pemula (8 Contoh)

  3. Tutorial Perintah Linux ln untuk Pemula (5 Contoh)