Bu örnek klasör yapısı göz önüne alındığında:
/folder1/file1.txt /folder1/file2.djd /folder2/file3.txt /folder2/file2.fha
"/" Klasöründen grep
içeren tüm *.txt
Dosyalarında özyinelemeli metin araması nasıl yapabilirim?
("grep -r <pattern> *.txt"
, "/" Klasöründen çalıştırıldığında başarısız oluyor çünkü bu klasörde .txt
Dosya yok.)
GNU Grep sürümünde bunun için bir anahtar var:
grep -R --include='*.txt' $Pattern
Aşağıdaki gibi açıklanmıştır:
--include=GLOB
Yalnızca temel adı GLOB ile eşleşen dosyaları arayın (--exclude altında açıklandığı gibi joker karakter eşleşmesini kullanarak).
Çok sayıda dosyanız varsa, 'Argument list çok uzun' hatasını önlemek için xargs komutunu dahil etmek yararlı olacaktır.
find . -name '*.txt' -print | xargs grep <pattern>
zsh
's EXTENDED_GLOB
seçenek ( dokümanlar )
grep <pattern> **/*.txt
Dosya türüne göre aranacak dosyaları seçmek için olanaklara sahip olan http://betterthangrep.com adresindeki ack'e bakmak isteyebilirsiniz.
find . -name '*.txt' -type f -exec grep <pattern> {} \;
Mannis'in cevabı, her bir metin dosyası için yeni bir grep sürecini destekleyecekti. Orada lot metin dosyalarınız varsa, önce her dosyayı açmayı düşünebilir ve bittiğinde .txt dosyalarını seçebilirsiniz:
grep -r <pattern> * | grep \.txt:
Bu daha fazla disk yoğundur, ancak yine de daha hızlı olabilir.
2019 ve grep'i yinelemeli metin araması için kullanmamın hiçbir yolu yok.
IMHO bugünün cevapları içermelidir ripgrep :
rg <pattern> -ttxt