2013-06-04 15 views

cevap

15

Bunun için find kullanmak isteyeceksiniz, çünkü grep bu şekilde yinelenen (bildiğim kadarıyla) bu şekilde çalışmayacaktır. adı strings.xml (-name "strings.xml") ile bir dosya için geçerli dizine (.) başlayan

find . -name "strings.xml" -exec grep "text" "{}" \; 

find komuta aramalar ve ardından her bulundu dosya için, grep komut belirtilen yürütün: Böyle bir şey çalışması gerekir . Küme parantezleri ("{}"), find'un bulduğu dosyanın adını belirtmek için kullandığı bir yer tutucudur. Daha fazla ayrıntı man find adresinde bulunabilir.

Ayrıca, find yinelemeli olarak çalıştığından, grep için -r seçeneğinin artık gerekli olmadığını unutmayın.

+0

sayesinde küme parantezleri ne yaparsınız? – thisiscrazy4

+0

@ thisiscrazy4 Bu bilgi ile güncellendi. –

+1

Özellikle bir dosya türünde bir dize bulmak için bu komutu kullandım. bulabilirsiniz. -name "* .java" -exec grep -rn "string" "{}" \; Olayları gösterir, ancak dosya adı yok. Dosya adı nasıl verilir. Pls yardımı. –

0

'u bulmayı deneyin. -type f |

bulmak komut arama "string.xml dize geçerli dizinden grep "strings.xml" * xargs.

1

grep Yani. Kullanımını yalnızca dosya eşleştirme ÞABLONUNUN arama dizinleri Recurse bir --include seçeneği destekleyen, aşağıdaki gibi bir şey deneyin:

find ./ -name "strings.xml" -exec grep "text" '{}' \; -print 

Bu bağlantılar söz:

grep -R --include 'strings.xml' text . 

Ben de oldukça hızlı grep daha görünüyor find kullanılarak çalıştı Aynı konu, size yardımcı olabilir:

'grep -R string *.txt' even when top dir doesn't have a .txt file

http://www.linuxquestions.org/questions/linux-newbie-8/run-grep-only-on-certain-files-using-wildcard-919822/

2

Sen grep komutunu kullanabilirsiniz:

grep -r "text" /path/to/dir/strings.xml