Yanıtlar:
xargs
baş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 -r
veya -R
seçeneğini destekliyorsa kullanın.
grep -r word .
Aksi takdirde, kullanımı -exec
birincil find
. Bu, xargs
dosya adlarında herhangi bir kısıtlama olmaksızın , aynı etkiyi elde etmenin olağan yoludur . Makul son sürümleri find
yardımcı komutu tek bir çağrıda birkaç dosya gruplamak için izin verir. Geçmek /dev/null
, grep
tek 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 find
ve xargs
dosya 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), -print0
ve -0
normal 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.