Saya mencari melalui repositori Git dan ingin memasukkan .git
folder tersebut.
grep
tidak termasuk folder ini jika saya jalankan
grep -r search *
Apa perintah grep untuk memasukkan folder ini?
Saya mencari melalui repositori Git dan ingin memasukkan .git
folder tersebut.
grep
tidak termasuk folder ini jika saya jalankan
grep -r search *
Apa perintah grep untuk memasukkan folder ini?
Jawaban:
Silakan merujuk ke solusi di akhir posting ini sebagai alternatif yang lebih baik untuk apa yang Anda lakukan.
Anda dapat secara eksplisit menyertakan file tersembunyi (direktori juga merupakan file).
grep -r search * .*
The *
akan cocok dengan semua file kecuali yang tersembunyi dan .*
akan cocok hanya file tersembunyi. Namun ini akan gagal jika tidak ada file non-tersembunyi atau tidak ada file tersembunyi di direktori tertentu. Anda tentu saja dapat menambahkan secara eksplisit, .git
bukan .*
.
Namun, jika Anda hanya ingin mencari di direktori tertentu, lakukan seperti ini:
grep -r search .
The .
akan cocok dengan jalan saat ini, yang akan mencakup non-tersembunyi dan file tersembunyi.
.*
akan menyertakan direktori induk (karena ..
cocok)
Saya baru saja mengalami masalah ini, dan berdasarkan jawaban @ bitmask, berikut adalah modifikasi sederhana saya untuk menghindari masalah yang ditunjukkan oleh @sehe:
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
apa yang saya lakukan salah di sini?
Mungkin Anda lebih suka menggabungkan "grep" dengan perintah "temukan" untuk solusi lengkap seperti:
find . -exec grep -Hn search {} \;
Perintah ini akan mencari di dalam file atau direktori tersembunyi untuk string "pencarian" dan mencantumkan file apa pun yang kebetulan dengan format keluaran ini:
Jalur file: Nomor baris: baris dengan kebetulan
./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Anda mungkin ingin menggunakan pendekatan ini, dengan asumsi Anda sedang mencari direktori saat ini (jika tidak ganti. Dengan direktori yang diinginkan):
find . -type f | xargs grep search
atau jika Anda hanya ingin mencari di tingkat atas (yang lebih cepat diuji jika Anda mencobanya):
find . -type f -maxdepth 1 | xargs grep search
PEMBARUAN: Saya mengubah contoh sebagai tanggapan atas komentar Scott. Saya juga menambahkan "-type f".
~
adalah direktori home pengguna. Pertanyaannya bukan tentang direktori home pengguna, jadi jawabannya tidak boleh disebutkan ~
. (2) Dalam sebuah find
perintah, -name '*'
adalah no-op (yaitu, tidak ada gunanya).
Untuk mencari di dalam HANYA semua file dan direktori tersembunyi dari lokasi Anda saat ini:
find . -name ".*" -exec grep -rs search {} \;
HANYA semua file tersembunyi:
find . -name ".*" -type f -exec grep -s search {} \;
HANYA semua direktori tersembunyi:
find . -name ".*" -type d -exec grep -rs search {} \;
Untuk menemukan hanya dalam folder tertentu, Anda dapat menggunakan:
ls -al | grep " \."
Ini adalah perintah yang sangat sederhana untuk mendaftar dan menyalurkan ke grep.
Selain saran Tyler, Berikut adalah perintah untuk melakukan grep semua file dan folder secara rekursif termasuk file tersembunyi
find . -name "*.*" -exec grep -li 'search' {} \;
Untuk mencegah pencocokan .
dan ..
yang bukan merupakan file tersembunyi, Anda dapat menggunakan grep
dengan ls -A
seperti dalam contoh ini:
ls -A | grep "^\."
^\.
menyatakan bahwa karakter pertama harus .
The -A
atau --almost-all
opsi tidak termasuk hasil .
dan ..
sehingga hanya file tersembunyi dan direktori dicocokkan.
Anda juga dapat mencari jenis file tersembunyi tertentu seperti untuk file direktori tersembunyi:
grep -r --include=*.directory "search-string"
Ini mungkin bekerja lebih baik daripada beberapa opsi lainnya. Opsi lain yang berfungsi bisa jadi terlalu lambat.