Coba
find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} \; -print
Ini harus secara rekursif mencari folder di bawah application
untuk file dengan .php
ekstensi dan teruskan ke grep
.
Pengoptimalan untuk ini adalah mengeksekusi:
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("
Ini menggunakan xargs
untuk meneruskan semua .php
output file dengan find
sebagai argumen untuk satu grep
perintah;misalnya, grep "debug (" file1 file2 file3
. -print0
pilihan find
dan -0
opsi xargs
pastikan spasi dalam nama file dan direktori ditangani dengan benar. -H
opsi diteruskan ke grep
memastikan bahwa nama file dicetak dalam semua situasi. (Secara default, grep
mencetak nama file hanya ketika beberapa argumen diteruskan.)
Dari man xargs:
-0
Item input diakhiri dengan karakter null alih-alih spasi, dan tanda kutip serta backslashare tidak khusus (setiap karakter diartikan secara harfiah). Menonaktifkan akhir string file, yang diperlakukan seperti argumen lainnya. Berguna saat item input mungkin berisi spasi putih, tanda kutip, atau garis miring terbalik. GNU menemukan
-print0
opsi menghasilkan input yang cocok untuk mode ini.
find
bahkan tidak diperlukan untuk contoh ini, seseorang dapat menggunakan grep
langsung (setidaknya GNU grep
):
grep -RH --include='*.php' "debug (" /srv/www/*/htdocs/system/application/
dan kami turun ke garpu proses tunggal.
Opsi:
-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.