Itu terjadi karena salah satu nama file berisi kutipan dan diteruskan xargs
apa adanya. Itu berarti xargs
dijalankan seperti xargs grep 'addresses' > /tmp/addr some file'name
- dan ada yang tidak ditentukan di '
sini.
Masalah sebenarnya adalah yang Anda gunakan find | xargs
. Itu adalah sesuatu yang Anda benar-benar tidak ingin lakukan, bahkan jika itu terlihat menggoda.
Ada beberapa solusi untuk masalah ini:
Gunakan -print0
opsi untuk find
dan -0
untuk xargs
:
find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addr
Ini adalah cara yang direkomendasikan untuk pipa dari find
ke xargs
karena dapat menangani nama file apapun, bahkan mereka baris mengandung.
Perhatikan bahwa menggunakan -name "*"
itu berlebihan. Anda juga harus mempertimbangkan -type f
untuk menggunakan hanya memfilter file. Dan Anda tentu saja dapat memanggil program dari dalam find
juga:
find … -type f -exec grep 'addresses' {} \; > /tmp/addr
Tetapi ini juga tidak disarankan. Lihat opsi kedua:
Gunakan pendekatan yang lebih efisien secara bersamaan - rekursif grep
dengan -r
opsi:
grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr