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 --include
określa grep
dołą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 xargs
. find
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