Cari di bawah direktori dan sub direktori untuk string

1

Bagaimana saya bisa mencari semua file di bawah direktori tertentu yang berisi urutan string tertentu seperti "superuser"

mis. mencari semua file dalam direktori dan sub-direktori saat ini (secara rekursif) jika mengandung "superuser" dunia

user27449
sumber

Jawaban:

2

grep -R opsi melakukan ini:

grep -R "superuser" .

EDIT: untuk mencari file .mp3 saja dan mengembalikan nama mereka (bukan konten yang cocok, karena mereka bukan file teks), gunakan find untuk mendapatkan daftar .mp3 dan kemudian gunakan xargs untuk meneruskannya grep -l:

find . -name "*.mp3" -print0 | xargs -0 grep -l "superuser"

Jika versi Anda menemukan dukungan -exec ... + (dan setidaknya OS X terbaru), Anda dapat menemukan run grep secara langsung:

find . -name "*.mp3" -exec grep -l "superuser" {} +
Gordon Davisson
sumber
Opsi tambahan yang berguna: -F untuk mempercepat pencarian string tetap; -l cukup tampilkan nama file, bukan baris yang cocok (berguna untuk file biner); -m 1 berhenti membaca file setelah pertandingan pertama.
RedGrittyBrick
bagaimana dengan daftar file dengan ekstensi .mp3?
user27449
@RedGrittyBrick: Setuju tentang -l dan -m1, tapi saya tidak setuju -F menjadi lebih cepat (meskipun itu yang menjadi kepanjangan dari F). Grep tradisional sebenarnya berjalan tercepat (pada file besar / banyak) di -E mode, sejak itu dikompilasi pola menjadi DFA - waktu startup yang lama untuk kompilasi, tetapi begitu itu dilakukan sangat cepat. -F mode mungkin cepat jika versi grep Anda menggunakan algoritma Boyer-Moore (bukan algo naif lama), tetapi grep paling modern IME adaptif dan akan memilih mode tercepat secara otomatis, tidak peduli apa pun flag yang Anda gunakan.
Gordon Davisson
@ Gordon: Benar sekali, kesalahan saya.
RedGrittyBrick