GNU/Linux >> Belajar Linux >  >> Linux

Cara Melakukan Pencarian Grep di Semua File dan Di Semua Direktori

Grep adalah alat yang sangat baik ketika Anda harus mencari konten file.

Biasanya, Anda menjalankan grep pada satu file seperti ini:

grep search_term filename

Grep cukup serbaguna. Jika Anda ingin mencari semua file dalam direktori dengan grep , gunakan seperti ini:

grep search_term *

Ada masalah dengan itu. Itu hanya mencari di semua file di direktori saat ini. Itu tidak akan mencari di subdirektori.

Anda dapat melakukan pencarian grep di semua file dan semua subdirektori dari direktori saat ini menggunakan -r opsi pencarian rekursif:

grep -r search_term . 

Anda juga dapat menentukan jalur direktori jika Anda tidak berada di direktori tempat Anda ingin melakukan pencarian:

grep -r search_term directory_path

Itu adalah rekap cepat. Mari saya tunjukkan semua ini secara rinci dengan contoh yang tepat sehingga lebih mudah untuk Anda pahami.

Grep mencari di semua file direktori

Inilah struktur direktori yang akan saya gunakan dalam contoh ini. Kecuali empty.txt, semua file mengandung istilah 'sederhana' yang akan saya lakukan pencarian grep.

[email protected]:~/scripts$ tree
.
├── dir1
│   └── new_script.sh
├── dir2
│   └── your_script.sh
├── dir3
│   ├── empty.txt
│   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

Untuk mencari kata 'sederhana' di semua file direktori saat ini, cukup gunakan wild card (*). Kartu liar sebenarnya menggantikan nama semua file dan direktori di direktori saat ini.

grep simple *

Ini akan mencari di semua file di direktori saat ini, tetapi tidak akan masuk ke subdirektori. Karena Anda tidak dapat langsung mengambil pencarian di direktori, itu akan menampilkan kesalahan "XYZ adalah direktori" bersama dengan hasil pencarian.

Jika Anda tidak berada di direktori yang sama tempat Anda ingin melakukan, Anda dapat menentukan jalur direktori dan mengakhirinya dengan /*

grep search_term directory_path/*

Pada dasarnya, Anda menggunakan wild card untuk memperluas semua elemen (file dan direktori) dari direktori yang diberikan.

Sekarang setelah Anda mengetahuinya, mari kita lihat bagaimana Anda dapat melakukan pencarian rekursif dengan grep sehingga grep juga melihat ke dalam file di subdirektori.

Grep pencarian rekursif di semua subdirektori direktori

Grep menyediakan -r pilihan untuk pencarian rekursif. Dengan opsi ini, grep akan melihat ke semua file di direktori saat ini (atau yang ditentukan) dan juga akan melihat semua file dari semua subdirektori.

Berikut pencarian rekursif yang saya lakukan pada contoh sebelumnya untuk melakukan pencarian grep di folder saat ini:

grep -r simple .

Ini hasilnya:

Ada juga -R opsi untuk pencarian rekursif dan bekerja hampir sama dengan -r pilihan.

grep -R simple .

Jadi, apa bedanya grep -r dan grep -R ? Hanya satu, sebenarnya. -R adalah pencarian dereferensi yang berarti akan mengikuti tautan simbolik untuk menuju ke file asli (yang mungkin terletak di beberapa bagian lain dari sistem).

Lihatlah output dari -R cari dalam contoh yang sama:

Apakah Anda memperhatikan bahwa itu memberikan hasil pencarian tambahan dengan linked.txt yang pada dasarnya adalah tautan simbolik dan dihilangkan dari pencarian grep dengan -r pilihan?

Jika Anda tidak berada di direktori tempat Anda ingin melakukan pencarian rekursif, cukup berikan jalur absolut atau relatif direktori tersebut ke perintah grep:

grep -r search_term path_to_directory

Semuanya tampak bagus tetapi bagaimana jika Anda ingin mengecualikan direktori tertentu dari pencarian rekursif? Ada ketentuannya juga. Sudah kubilang, grep adalah perintah yang sangat serbaguna.

grep -r --exclude-dir=dir_name serach_term directory_path

Bukan itu. Anda dapat mengecualikan lebih dari satu subdirektori dari pencarian rekursif dengan cara berikut:

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

Berikut adalah tampilan mengecualikan direktori dalam contoh kami di sini:

Dan ya, seperti yang ditunjukkan oleh contoh di atas, pengecualian berfungsi dengan -r dan -R opsi rekursif.

Untuk meringkas

Berikut ringkasan singkat penggunaan grep search untuk banyak file dan direktori:

Perintah Grep Deskripsi
string grep * Mencari di semua file di direktori saat ini
grep string dir Mencari di semua file di direktori dir
grep -r string . Pencarian rekursif di semua file di semua subdirektori
grep -r string dir Pencarian rekursif di semua file di semua subdirektori dir
grep -R string . Sama seperti r tetapi mengikuti tautan simbolik

Saya harap Anda menyukai tip grep cepat ini. Jika Anda menginginkan lebih, Anda dapat membaca tutorial terperinci ini tentang menggunakan perintah grep:

Beri tahu saya jika Anda memiliki pertanyaan atau saran tentang topik ini.


Linux
  1. Baris perintah:cari dan ganti di semua nama file yang cocok dengan grep

  2. Cara mendaftar semua file dan direktori secara rekursif

  3. Bagaimana cara mencari direktori dan menemukan file yang cocok dengan regex?

  1. Cara Mencari dan Menghapus Direktori Secara Rekursif di Linux

  2. Cara Mengarsipkan File Dan Direktori Di Linux [Bagian 2]

  3. Bagaimana cara menemukan semua file dan direktori yang dapat ditulis oleh pengguna tertentu?

  1. Cara Menyalin File dan Direktori di Linux

  2. Cara Menemukan String atau Word Tertentu di File dan Direktori

  3. Cara Mengarsipkan File Dan Direktori Di Linux [Bagian 1]