GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mengecualikan direktori dari grep -R?

SOLUSI 1 (gabungkan find dan grep )

Tujuan dari solusi ini bukan untuk menangani grep kinerja tetapi untuk menampilkan solusi portabel :juga harus bekerja dengan busybox atau versi GNU yang lebih lama dari 2.5.

Gunakan find , untuk mengecualikan direktori foo dan bar :

find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print

Kemudian gabungkan find dan penggunaan grep non-rekursif , sebagai solusi portabel :

find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;

SOLUSI 2 (menggunakan --exclude-dir pilihan grep ):

Anda sudah mengetahui solusi ini, tetapi saya menambahkannya karena ini adalah solusi terbaru dan efisien. Perhatikan bahwa ini adalah solusi yang kurang portabel tetapi lebih mudah dibaca manusia.

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Untuk mengecualikan banyak direktori, gunakan --exclude-dir sebagai:

--exclude-dir={node_modules,dir1,dir2,dir3}

SOLUSI 3 (Ag)

Jika Anda sering mencari kode, Ag (The Silver Searcher) adalah alternatif yang jauh lebih cepat untuk grep, yang disesuaikan untuk mencari kode. Misalnya, secara otomatis mengabaikan file dan direktori yang terdaftar di .gitignore , jadi Anda tidak harus meneruskan opsi pengecualian rumit yang sama ke grep atau find .


Versi terbaru GNU Grep (>=2.5.2) sediakan:

--exclude-dir=dir

yang mengecualikan direktori yang cocok dengan pola dir dari pencarian direktori rekursif.

Jadi, Anda dapat melakukan:

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Untuk informasi lebih lanjut tentang sintaks dan penggunaan, lihat

  • Halaman manual GNU untuk Pemilihan File dan Direktori
  • Jawaban StackOverflow terkait Gunakan grep --exclude/--include sintaks untuk tidak grep melalui file tertentu

Untuk GNU Greps dan POSIX Grep yang lebih lama , gunakan find seperti yang disarankan dalam jawaban lain.

Atau cukup gunakan ack (Edit :atau Pencari Perak ) dan selesaikan!


Linux
  1. Bagaimana cara menyalurkan output dari grep ke cp?

  2. Bagaimana saya bisa menghapus jenkins sepenuhnya dari linux

  3. grep rekursif:mengecualikan direktori tertentu

  1. Bagaimana saya bisa memfilter hasil unik dari keluaran grep?

  2. Bagaimana saya bisa melakukan chmod rekursif hanya pada direktori?

  3. Bagaimana saya bisa menghapus printer dari CUPS?

  1. Cara Mengecualikan Direktori Tertentu Dari Menyalin Di Linux

  2. Bagaimana saya bisa mengecualikan paket dari yum-cron tetapi tidak dari pemutakhiran yum manual?

  3. Bagaimana saya bisa menulis ke dmesg dari baris perintah?