xargs
mengharapkan input dalam format yang tidak dihasilkan oleh perintah lain, sehingga sulit untuk digunakan secara efektif. Apa yang salah di sini adalah Anda memiliki file yang namanya harus dikutip pada input ke xargs
(mungkin berisi '
).
Jika grep Anda mendukung -r
atau -R
opsi untuk pencarian rekursif, gunakan itu.
grep -r word .
Jika tidak, gunakan -exec
primer dari find
. Ini adalah cara biasa untuk mendapatkan efek yang sama seperti xargs
, kecuali tanpa batasan pada nama file. Versi find
yang cukup baru memungkinkan Anda mengelompokkan beberapa file dalam satu panggilan ke perintah tambahan. Meneruskan /dev/null
ke grep
memastikan bahwa itu akan menampilkan nama file di depan setiap kecocokan, meskipun kebetulan dipanggil pada satu file.
find . -type f -exec grep word /dev/null {} +
Versi find
yang lebih lama (pada sistem lama atau OpenBSD, atau utilitas yang dikurangi seperti BusyBox) hanya dapat memanggil perintah tambahan pada satu file dalam satu waktu.
find . -type f -exec grep word /dev/null {} \;
Beberapa versi find
dan xargs
memiliki ekstensi yang memungkinkan mereka berkomunikasi dengan benar, menggunakan karakter nol untuk memisahkan nama file sehingga tidak diperlukan kutipan. Saat ini, hanya OpenBSD yang memiliki fitur ini tanpa memiliki -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Saya kira maksud Anda opsi pertama
grep rekursif, untuk mencari konten di dalam file
grep -R "content_to_search" /path/to/directory
ls rekursif, untuk mencari file yang cocok
ls -lR | grep "your_search"
Jika Anda memiliki alat GNU (yang Anda lakukan jika tag Linux akurat) maka Anda dapat menggunakan -print0
dan -0
untuk mengatasi masalah kutipan biasa:
find . -type f -print0 | xargs -0 grep word