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.