Yanıtlar:
xargsbaşka bir komutun üretmediği bir formatta girdi bekler, bu nedenle etkili bir şekilde kullanmak zordur. Burada yanlış olan şey, isminin girişte alıntılanması gereken xargs(muhtemelen a içeren ') bir dosyanızın olmasıdır .
Grep'iniz yinelemeli arama için -rveya -Rseçeneğini destekliyorsa kullanın.
grep -r word .
Aksi takdirde, kullanımı -execbirincil find. Bu, xargsdosya adlarında herhangi bir kısıtlama olmaksızın , aynı etkiyi elde etmenin olağan yoludur . Makul son sürümleri findyardımcı komutu tek bir çağrıda birkaç dosya gruplamak için izin verir. Geçmek /dev/null, greptek bir dosyada çağrılsa bile, her eşlemenin önünde dosya adını göstermesini sağlar.
find . -type f -exec grep word /dev/null {} +
Eski sürümleri find(eski sistemlerde veya OpenBSD'de veya BusyBox gibi azaltılmış yardımcı programlarda) aynı anda yalnızca bir dosyadaki yardımcı komutu çağırabilir.
find . -type f -exec grep word /dev/null {} \;
Bazı sürümleri findve xargsdosya adlarını ayırmak için boş karakterler kullanarak doğru iletişim kurmalarına izin veren uzantılara sahiptir, böylece tırnak işareti gerekmez. Bu günlerde sadece OpenBSD bu özelliğe sahip değil -exec … {} +.
find . -type f -print0 | xargs -0 grep word /dev/null
Sanırım ilk seçenek demek istiyorsun
grep özyinelemeli, dosyaların içindeki içeriği aramak için
grep -R "content_to_search" /path/to/directory
Özyinelemeli, eşleşen dosyaları aramak için
ls -lR | grep "your_search"
GNU araçlarınız varsa (Linux etiketi doğruysa bunu yaparsınız), -print0ve -0normal alıntılama sorunlarını gidermek için kullanabilirsiniz ve :
find . -type f -print0 | xargs -0 grep word
Geçerli dizinde grep'i kullanabilirsiniz:
grep -irl root .
Sanırım dosyalarda bir dize bulmak istiyorsun
Deneyin find . -name "*" | xargs grep -l "string"
/dev/null. Çıktı formatı, kaç dosya eşleştiğine bağlı olarak değişebileceği bir sıkıntıdır ... teşekkürler.