Normalmente utilizzo questo stile di comando per scorrere grepsu 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 grepcon gli argomenti dati e il nome di ciascun file.
L' -xdevargomento 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 fsignifica cercare solo i file, quindi le directory, i dispositivi e altri file speciali vengono ignorati (continuerà a rientrare nelle directory e verrà eseguito grepsui file all'interno - semplicemente non verrà eseguito grepsulla directory stessa, che non funzionerebbe comunque). E l' -Hopzione per grepdirgli di stampare sempre il nome del file nel suo output.
findaccetta tutti i tipi di opzioni per filtrare l'elenco dei file. Ad esempio, -name '*.txt'elabora solo i file che terminano con .txt. -size -2Mindica file di dimensioni inferiori a 2 megabyte. -mtime -5indica 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 findper vedere l'elenco completo dei possibili filtri.
Permission deniederrori? L'hai eseguito come utente root o normale?