Mendapatkan xargs: kutipan yang tidak dapat ditebak ketika mencoba menemukan teks dalam file

1

Saya menggunakan Mac 10.9.5 dengan bash shell. Saya mencoba mencari contoh teks di dalam sekelompok file, tetapi untuk beberapa alasan, dalam satu direktori tertentu, saya mendapatkan kesalahan "Kutipan Berminat" yang aneh ini ...

Daves-MacBook-Pro:sbadmin davea$ find src/main/webapp/WEB-INF/ -name "*" | xargs grep 'addresses' > /tmp/addr
xargs: unterminated quote

Ada ide bagaimana menyelesaikan ini?

Dave
sumber

Jawaban:

4

Itu terjadi karena salah satu nama file berisi kutipan dan diteruskan xargsapa adanya. Itu berarti xargsdijalankan 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:

  1. Gunakan -print0opsi untuk finddan -0untuk xargs:

    find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addr

    Ini adalah cara yang direkomendasikan untuk pipa dari findke xargskarena dapat menangani nama file apapun, bahkan mereka baris mengandung.

    Perhatikan bahwa menggunakan -name "*"itu berlebihan. Anda juga harus mempertimbangkan -type funtuk menggunakan hanya memfilter file. Dan Anda tentu saja dapat memanggil program dari dalam findjuga:

    find  -type f -exec grep 'addresses' {} \; > /tmp/addr

    Tetapi ini juga tidak disarankan. Lihat opsi kedua:

  2. Gunakan pendekatan yang lebih efisien secara bersamaan - rekursif grepdengan -ropsi:

    grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr
slhck
sumber