trzeba wyszukać coś w całej treści
Próbuję:
find . | xargs grep word
Dostaję błąd:
xargs: niezakończony cytat
Jak to osiągnąć?
xargs
oczekuje danych wejściowych w formacie, który nie jest generowany przez żadne inne polecenie, więc trudno jest je skutecznie wykorzystać. To, co dzieje się tutaj źle, to to, że masz plik, którego nazwa musi być cytowana na wejściu xargs
(prawdopodobnie zawiera a '
).
Jeśli twój grep obsługuje opcję -r
lub -R
dla wyszukiwania rekurencyjnego, użyj go.
grep -r word .
W przeciwnym razie użyj -exec
głównego z find
. Jest to zwykły sposób osiągnięcia tego samego efektu, co xargs
bez ograniczeń nazw plików. Niedawno najnowsze wersje find
pozwalają grupować kilka plików w jednym wywołaniu polecenia pomocniczego. Przechodząc /dev/null
dogrep
gwarantuje, że pokaże nazwę pliku przed każdym dopasowaniem, nawet jeśli zdarzy się, że zostanie wywołany w jednym pliku.
find . -type f -exec grep word /dev/null {} +
Starsze wersje find
(w starszych systemach lub OpenBSD lub zredukowanych narzędziach, takich jak BusyBox) mogą wywoływać polecenie pomocnicze tylko w jednym pliku na raz.
find . -type f -exec grep word /dev/null {} \;
Niektóre wersje find
i xargs
mają rozszerzenia, które pozwalają im poprawnie się komunikować, używając znaków zerowych do oddzielania nazw plików, dzięki czemu nie jest wymagane cytowanie. Obecnie tylko OpenBSD ma tę funkcję bez -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
/dev/null
. Uciążliwe jest to, że format wyjściowy może się różnić w zależności od liczby dopasowanych plików ... dzięki.Chyba masz na myśli pierwszą opcję
grep rekurencyjny, do wyszukiwania treści w plikach
ls rekurencyjny, do wyszukiwania pasujących plików
źródło
Jeśli masz narzędzia GNU (które robisz, jeśli tag Linux jest dokładny), możesz użyć
-print0
i-0
obejść zwykłe problemy z cytowaniem:źródło
Istnieje również ACK , jest zaprojektowany, aby przejść specjalne katalogi takie jak
.svn
,.git
i takie. To codzienne narzędzie dla programistów.Jest dość blisko grep dla popularnych przełączników.
Dawny. :
Pakiet
ack-grep
na temat debiana i polubień debiana.źródło
W bieżącym katalogu możesz użyć grep:
źródło
Myślę, że chcesz znaleźć ciąg w plikach
Próbować
find . -name "*" | xargs grep -l "string"
źródło