Bir dizinin altındaki belirli bir uzantıya sahip dosyalarda açılır


11

Belirli bir uzantıya sahip bir dizinin altındaki dosyalarda anahtar sözcük aramaya izin veren bir komut var mı?

Dize grep -irn "string" ./path, dizin altındaki tüm dosyalar için özyinelemeli arama sağlar ./path. Benim özel gereksinimim ./pathgibi bir uzantı ile tüm dosyaları aramak için*.h

Yanıtlar:



10

S ve (açmak) sh ell tercih iyon globstarkomutuyla

    shopt -s globstar

Bu, **dosya adı bileşeni olarak burada ve aşağıda her şeyi ifade eder. Yani dizindeki ve alt dizinlerindekipath/** her şey demektir . (Buraya yazmanıza gerek yoktur .) Sonra kullanabilirsinizpath./

grep -in "string" path/**/*.h

.hiçindeki ve altındaki tüm dosyaları aramak için path.


Sen edebilirsiniz u ile seçenekleri nset shopt -u.



3

Makinenize bir şey yükleyebiliyorsanız, ack kullanmanızı öneririm .

Tam olarak ihtiyacınız olanı ve daha fazlasını yapabilirsiniz. Kullanım durumunuz için şunları yapabilirsiniz:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • h dosyalarındaki --hh filtreler
  • -i davayı görmezden geliyor

Hangi dosya filtrelerinin yerel olarak desteklendiğini bulmak için komutu çalıştırın ack --help=type.


Bir de ag , eski bir klon klonu var. Eski, çünkü özellik setleri o zamandan beri biraz farklılaştı.
8bittree

Ag bilmiyordum. Paylaşım için teşekkürler.
AD

3

Peki ya bu?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Açıklama:

  • -L: simgeleri takip et
  • -name: yıldız işaretini kullanarak uzantıları açıklayabilirsiniz
  • -in: teklifinizle aynı, ancak 'r' yerine findkomut
  • {}: bu findkomutun sonucudur
  • \; : findile birleşmeniz durumunda -exec, bu komut sonu belirteci

1
Nasıl "*.h"çalışır? '*.h'
Joe

Her zaman çift tırnak işaretleri ile çalışıyorum, fark yarattığını düşünmüyorum.
Dominique

0

Gnu grep kullanıyorsanız, tam olarak ne istediğinizi yapan bir bayrak var:

grep -irn --include=\*.h "string" path

diğer açılımlarda mevcut olduğunu düşünmeme rağmen.

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.