Normalmente utilizzo questo stile di comando per scorrere grep
su un numero di file:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
Ciò che effettivamente fa è creare un elenco di tutti i file sul sistema e, quindi, per ogni file, eseguire grep
con gli argomenti dati e il nome di ciascun file.
L' -xdev
argomento dice che deve ignorare altri filesystem - questo è utile per evitare filesystem speciali come /proc
. Tuttavia ignorerà anche i normali filesystem - quindi se, per esempio, la tua cartella / home si trova su una partizione diversa, non verrà cercata - dovresti dirlo find / /home -xdev ...
.
-type f
significa cercare solo i file, quindi le directory, i dispositivi e altri file speciali vengono ignorati (continuerà a rientrare nelle directory e verrà eseguito grep
sui file all'interno - semplicemente non verrà eseguito grep
sulla directory stessa, che non funzionerebbe comunque). E l' -H
opzione per grep
dirgli di stampare sempre il nome del file nel suo output.
find
accetta tutti i tipi di opzioni per filtrare l'elenco dei file. Ad esempio, -name '*.txt'
elabora solo i file che terminano con .txt. -size -2M
indica file di dimensioni inferiori a 2 megabyte. -mtime -5
indica i file modificati negli ultimi cinque giorni. Unisciti a questi con -a per e e -o per o , e usa le '('
parentesi ')'
per raggruppare le espressioni (tra virgolette per impedire alla shell di interpretarle). Quindi per esempio:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Dai un'occhiata man find
per vedere l'elenco completo dei possibili filtri.
Permission denied
errori? L'hai eseguito come utente root o normale?