Pracuję z Xenserver i chcę wykonać polecenie na każdym pliku znajdującym się w katalogu, wyrzucając niektóre elementy z danych wyjściowych polecenia i dołączając je do pliku.
Mam jasność co do polecenia, którego chcę użyć, i jak w razie potrzeby wyodrębnić ciąg (ciągi).
Ale nie jestem do końca pewien, w jaki sposób mam wykonać to polecenie na każdym pliku, przechodząc do następnego, dopóki nie zostaną znalezione żadne pliki.
grep $PATTERN *.cpp *.h
. Jeśli potrzebujesz bardziej szczegółowych reguł dla tego, które pliki powinny być grepowane, użyjfind
polecenia (sprawdź odpowiedź Roba).grep -r x .
wyniki pochodzą ze wszystkich plików wszystkich rozszerzeń. Jeśli uruchomię,grep -r x *.scss
nie otrzymam żadnych wyników.*.scss
plików w bieżącym katalogu, ale gdzieś głębiej w podkatalogach, więc grep nie przegląda wszystkich żądanych plików. Powinieneś użyć--include
opcji, aby powiedzieć grepowi, aby szukał rekurencyjnie plików pasujących do określonych wzorców:grep -r x --include '*.scss' .
(zwróć uwagę na cudzysłowy, uniemożliwiają one rozwinięcie wzorca przez powłokę). Lub po prostu użyjfind
(patrz odpowiedź Roba).W Linuksie zwykle używam tego polecenia, aby rekurencyjnie grepować dla określonego tekstu w katalogu
gdzie,
r = rekurencyjny, tzn. przeszukaj podkatalogi w bieżącym katalogu
n = wydrukuj numery linii na standardowe wyjście
i = wyszukiwanie bez rozróżniania wielkości liter
źródło
Użyj znajdź. Poważnie, jest to najlepszy sposób, ponieważ wtedy naprawdę możesz zobaczyć, na jakich plikach działa:
Uwaga: -H jest specyficzne dla komputerów Mac, w wynikach pokazuje nazwę pliku.
źródło
xargs
zamiast korzystania z-exec
tego będzie znacznie szybsze, ponieważ-exec
spawnuje nowy proces dla każdego grepa, a narzut staje się znaczny przy dużej liczbie plików. Obowiązują standardowe ostrzeżenia dotyczące spacji w nazwach plikówxargs
.xargs
składni.find . -iname "*.sql" -print0 | xargs -0 grep "slow"
Aby wyszukiwać we wszystkich podkatalogach, ale tylko w określonych typach plików , użyj grep z
--include
.Na przykład wyszukiwanie rekurencyjne w bieżącym katalogu dla tekstu w * .yml i * .yaml:
źródło
Jeśli chcesz wykonać wiele poleceń, możesz użyć:
źródło