GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara Menggabungkan find dan grep untuk pencarian yang kompleks? ( GNU/linux, temukan, grep )

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.

Linux
  1. Cara Menemukan dan Membunuh Proses Zombie di Linux

  2. Bagaimana Cara Mencari File Berdasarkan Ukuran Dan Ekstensi?

  3. Cara mencari file menggunakan regex di skrip shell linux

  1. Cara Mencari dan Menghapus Direktori Secara Rekursif di Linux

  2. Bagaimana saya bisa mencari file dengan nama dan jalur parsialnya?

  3. Cara mencari file di file war,ear dan jar secara rekursif di Linux

  1. Cara menemukan File di Linux

  2. Linux – Bagaimana Cara Mendapatkan Kata Tertentu Dan Mengambil Teks?

  3. Gunakan Temukan dan Temukan untuk mencari file di Linux