Zwykle używam tego stylu poleceń do uruchamiania grep
wielu plików:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
W rzeczywistości robi to listę wszystkich plików w systemie, a następnie dla każdego pliku wykonuje się grep
z podanymi argumentami i nazwą każdego pliku.
-xdev
Teza mówi, że musi znaleźć ignorować inne systemy plików - jest to dobre dla uniknięcia specjalnych systemów plików, takich jak /proc
. Jednak zignoruje również normalne systemy plików - więc jeśli na przykład folder / home znajduje się na innej partycji, nie zostanie przeszukany - trzeba by powiedzieć find / /home -xdev ...
.
-type f
oznacza wyszukiwanie tylko plików, więc katalogi, urządzenia i inne pliki specjalne są ignorowane (nadal będzie się powtarzało w katalogach i będzie działać grep
na plikach w nim zawartych - po prostu nie uruchomi się grep
na samym katalogu, co i tak by nie działało). I -H
opcja grep
nakazująca mu zawsze drukować nazwę pliku na wyjściu.
find
akceptuje wszelkiego rodzaju opcje filtrowania listy plików. Na przykład -name '*.txt'
przetwarza tylko pliki z rozszerzeniem .txt. -size -2M
oznacza pliki mniejsze niż 2 megabajty. -mtime -5
oznacza pliki zmodyfikowane w ciągu ostatnich pięciu dni. Połącz je razem z -a dla i i -o dla lub i użyj '('
nawiasów ')'
do grupowania wyrażeń (w cudzysłowach, aby zapobiec ich interpretacji przez powłokę). Na przykład:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Spójrz na, man find
aby zobaczyć pełną listę możliwych filtrów.
Permission denied
błędów? Czy uruchomiłeś go jako root lub zwykły użytkownik?