* .C dosyaları için yinelemeli grep başarısız oluyor


13

Aşağıdaki şekilde tüm .c dosyalarında bir deseni tekrar tekrar aramaya çalıştım

> grep -lr search-pattern *.c

Ama bunu çıktı olarak aldım

> grep: *.c: No such file or directory

Bunu kullandığımda:

> grep -lr search-pattern *

Ben bolca alıyorum. desenleri ile dizinlerde c dosyaları.

Önceki ifadede sorun nedir?

Yanıtlar:


22

Ben şu --includeseçeneği kullanmanızı öneririz grep:

grep -lr --include='*.c' search-pattern .

1
+1. --include=GLOBSeçeneği bilmiyordum . Özyinelemeli seçenekle birlikte bu çok güçlüdür ve gerektirmez find. Güzel!
gertvdijk

Buradaki partiye geç, ama .komutun sonunda ne için olduğu konusunda kafam karıştı .
Nathan Jones

1
@NathanJones: grep, aramak için bir veya daha fazla dosya adı veya dizin gerektirir. Nokta diyor: geçerli dizinde arama
enzotib

3

*.cDesen kabuk tarafından değerlendirilir. Bu, kullandığınız gibi geçerli dizine uygulanır ls *.c.

Bunun yerine istediğinizi *.cdesenle eşleşen tüm dosyaları bulmak (yinelemeli) ve içinde grepsizin için arama yapmak olduğunu düşünüyorum. İşte bunu yapmanın bir yolu:

find . -name "*.c" -print0 | xargs --null grep -l search-pattern

Bu kullanır xargsarama sonuçlarını eklemek find.


Alternatif olarak, -execbulmak için seçeneği kullanın, örneğin:

find . -name "*.c" -exec grep -l search-pattern "{}" \;

Ayrıca, -lseçeneği gerçekten isteyip istemediğinizden emin değilim grep. İlk maçta duracak:

-l, --files-with-matches
      Suppress normal output; instead print the name of  each
      input  file  from which output would normally have been
      printed.  The scanning will stop on  the  first  match.
      (-l is specified by POSIX.)

find/xargsBoşluk içeren dosya isimleri sözdizimi bozulur. -LSeçeneği grepher dosyanın ilk maç durağı ve sonraki dosyayla devam: Bir tek model her bir dosya bir kez en az içerdiği olup olmadığını görmek istiyorsanız, bu hızlıdır.
enzotib

@enzotib Teşekkürler, -print0ve seçeneğini kullanarak düzeltildi xargs --null.
gertvdijk

-1

Bunun oldukça eski bir iş parçacığı olduğunu biliyorum, ama aynı soruya sahip olduğum için, aynı şekilde tercih etmemi tercih ediyorum, çok daha kısa bir biçimde.

ls | grep "file.*.c"

2
Soru, bir dosyayı aramakla ilgili olmayan bir model aramakla ilgilidir.
Jay
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.