Jak używać grep rekurencyjnie na określonych rozszerzeniach plików

Jak używać grep rekurencyjnie na określonych rozszerzeniach plików

grep to świetne narzędzie do wyszukiwania plików w systemie Linux i standardowe narzędzie do wprowadzania danych, które może dopasowywać ciągi i wzorce wyrażeń regularnych. Czasami jednak konieczne jest kontrolowanie, których plików grep szukać, a do tego ma wbudowane flagi.

Uwzględnij tylko określone pliki w wyszukiwaniu grep

Domyślnie grep wyszuka wszystkie pliki w danym folderze i jego podfolderach, jeśli wywołasz go z -r flagą rekurencyjną. Spowoduje to odebranie wszystkiego, ale jeśli chcesz tylko niektórych rozszerzeń, opcją, której będziesz chciał użyć, jest--include.

Flaga --includeokreśla grepdołączenie tylko plików, które pasują do określonego wzorca. Jeśli jest określony, grep wszystkie włączone flagi będą traktowane jako biała lista. Możesz użyć tego z dowolnymi znakami globalnymi Linuksa , takimi jak symbole wieloznaczne, aby dopasować wszystko, w tym określone rozszerzenie:

grep -inr --include \*.txt "foo"~/folder

Zauważ, że jest to poprzedzane ukośnikiem \ , ponieważ w nazwach plików mogą być gwiazdki. Możesz także określić kilka --include flag, na przykład, aby wyszukać wszystkie pliki źródłowe HTML, JS i CSS w wwwroot:

grep -inr --include \*.html --include \*.css --include \*.js "foo"~/folder

Podobnie, możesz również wykluczyć niektóre nazwy plików, które nadal będą pasować do wszystkiego poza glob, działając jako czarna lista na wierzchu istniejącej konfiguracji:

grep -inr --exclude \*.txt "foo"~/folder

Istnieje również flaga wykluczająca całe katalogi naraz:

grep -inr --exclude-dir config "foo"~/folder

Zamiast tego użyj wyszukiwania

Alternatywnie, jeśli wolisz używać find narzędzia do wyszukiwania plików, możesz połączyć je z grep kanałami i plikami xargsfind może wyszukiwać za pomocą wzorców i wyrażeń regularnych i ma wiele zalet, w tym możliwość łatwego filtrowania plików na podstawie metadanych, takich jak rozmiar, data utworzenia i modyfikacji oraz inne identyfikatory systemu Linux.

Polecenie jest trochę głupie, ponieważ będziesz musiał użyć -print0 na końcu find , aby wydrukować jednowierszową listę, a następnie przekazywać ją tam xargs -0 iz powrotem grep .

 find. / -type f -iname "*.txt"-print0 | xargs -0 grep "foo"

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *