Saya mencoba melakukan pencarian teks di beberapa file yang berbagi struktur direktori yang sama, tetapi tidak di pohon direktori yang sama, di GNU / Linux.
Saya memiliki server web dengan banyak situs yang memiliki struktur pohon yang sama (kerangka kerja PHP MV Code Igniter), jadi saya ingin mencari di direktori tertentu di bawah pohon untuk setiap situs, contoh:
/srv/www/*/htdocs/system/application/
Di mana * adalah nama situs. Dan dari direktori aplikasi itu , saya ingin mencari semua pohon sampai ke daunnya, untuk file * .php yang memiliki beberapa pola teks di dalamnya, katakanlah "debug (", tidak perlu ekspresi reguler.
Saya tahu cara menggunakan find dan grep tetapi saya tidak pandai menggabungkannya.
Bagaimana saya melakukan ini?
Terima kasih sebelumnya!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
dapat mengambil+
operator alih-alih\;
melakukan jenis eksekusi proses yangxargs
sama yang dilakukan. Jadi,find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
lakukan hal yang sama sepertixargs
contoh dalam jawaban ini, tetapi dengan satu proses garpu yang lebih sedikit (dan masih 0 risiko untuk masalah nama file).find
bahkan tidak diperlukan untuk contoh ini, orang dapat menggunakangrep
secara langsung (setidaknyaGNU grep
):dan kita menuju satu proses garpu.
Pilihan:
-R, --dereference-recursive Read all files under each directory, recursively. Follow all symbolic links, unlike -r.
-H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.
--include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
--exclude=GLOB Skip any command-line file with a name suffix that matches the pattern GLOB, using wildcard matching; a name suffix is either the whole name, or any suffix starting after a / and before a +non-/. When searching recursively, skip any subfile whose base name matches GLOB; the base name is the part after the last /. A pattern can use *, ?, and [...] as wildcards, and \ to quote a wildcard or backslash character literally.
sumber
-RH
artinya opsi?man grep
kutipan deskripsi opsi ke posting.Shell Anda dapat menemukan file php dan memberikannya kepada grep. Dalam bash:
sumber