Linux'ta bir dizinin tüm içeriğinde bir kelime nasıl aranır


15

tüm içerikte bir şey araması gerekir

Deniyorum:

find . | xargs grep word

Hata alıyorum:

xargs: belirsiz teklif

Bunu nasıl başarabilirim?

Yanıtlar:


15

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

+1 için özellikle /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.
— Peter.O

12

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"

özyinelemeli-case_insensitive-show_line_number için grep -rin

Her dosyanın içeriğinde arama yapabilmek istiyorum.

birincisi, herhangi bir dosyadaki herhangi bir yinelemeyi döndürür ve yinelemenin bulunduğu dosyayı belirtir

2

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

0

Ayrıca ack.svn , .gitve benzeri özel dizinleri atlamak için tasarlanmıştır . Geliştiriciler için günlük bir araçtır.

Ortak anahtarlar için oldukça yakın .

Ör. :

ack -r string .

ack-grepDebian ve debian beğenileri üzerine paket .



-1

Sanırım dosyalarda bir dize bulmak istiyorsun

Deneyin find . -name "*" | xargs grep -l "string"


Xargs ("Sonlandırılmamış fiyat teklifi") hata mesajı OP'nin içinde bir dosya olduğunu gösterir. kendi adına bir alıntı var. Hattın da buna dolanacak. Belirtildiği gibi, farklı bir sonlandırmaya ihtiyacınız var.
— thiton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.