RIFERIMENTO RAPIDO FIND
Ricerca file per nome, tipo, dimensione, tempo, permessi e azioni
Ricerca Base
Eseguire find
find . # elenca tutti i file ricorsivamente
find /var/log # ricerca da percorso specifico
find . -name "*.txt" # trova per nome
find / -name "config" 2>/dev/null # sopprimi errori permesso
find dir1 dir2 -name "*.py" # cerca in più directory
Sintassi Generale
| find [path...] [tests] [actions] | Forma generale — percorsi, poi test, poi azioni |
| path | Directory di partenza (default: directory corrente) |
| test | Condizione per filtrare file (-name, -type, ecc.) |
| action | Cosa fare con le corrispondenze (-print, -exec, ecc.) |
| Azione predefinita | -print se nessuna azione è specificata |
Pattern di Nome
Corrispondenza Nome
find . -name "*.log" # glob case-sensitive
find . -iname "readme*" # glob case-insensitive
find . -name "*.py" -o -name "*.js" # OR: file Python o JS
find . -path "*/src/*.ts" # corrispondenza percorso completo
find . -regex '.*\.\(py\|js\)' # regex POSIX su percorso completo
Test Nome
| -name pattern | Basename corrisponde a glob shell (case-sensitive) |
| -iname pattern | Basename corrisponde a glob (case-insensitive) |
| -path pattern | Percorso completo corrisponde a glob shell |
| -ipath pattern | Percorso completo corrisponde a glob (case-insensitive) |
| -regex pattern | Percorso completo corrisponde a espressione regolare |
| -iregex pattern | Percorso completo corrisponde a regex (case-insensitive) |
Filtri per Tipo
Filtra per Tipo
find . -type f # solo file regolari
find . -type d # solo directory
find . -type l # link simbolici
find . -type f -name "*.sh" # combina tipo + nome
Tipi di File
| -type f | File regolare |
| -type d | Directory |
| -type l | Link simbolico |
| -type b | Dispositivo a blocchi |
| -type c | Dispositivo a caratteri |
| -type p | Pipe con nome (FIFO) |
| -type s | Socket |
| -empty | File o directory vuota |
Dimensione e Tempo
Esempi Dimensione e Tempo
find . -size +100M # più grande di 100 MB
find . -size -1k # più piccolo di 1 KB
find . -mtime -7 # modificato negli ultimi 7 giorni
find . -mmin -30 # modificato negli ultimi 30 minuti
find . -newer reference.txt # più recente del file di riferimento
Test Dimensione e Tempo
| -size +/-Nc | Dimensione in byte (c), kilobyte (k), megabyte (M), gigabyte (G) |
| -mtime +/-N | Modificato N*24 ore fa (+più vecchio, -più recente) |
| -atime +/-N | Acceduto N*24 ore fa |
| -ctime +/-N | Stato cambiato N*24 ore fa |
| -mmin +/-N | Modificato N minuti fa |
| -newer file | Modificato più di recente del file |
| -newermt date | Modificato dopo la stringa data (GNU) |
Permessi
Esempi Permessi
find . -perm 644 # permessi esatti: rw-r--r--
find . -perm -u+x # utente ha bit execute
find . -perm /o+w # altri hanno write (qualsiasi)
find . -user root # di proprietà di root
find . -group www-data -type f # di proprietà del gruppo
Test Permessi
| -perm mode | Corrispondenza esatta dei permessi |
| -perm -mode | Tutti i bit specificati sono impostati |
| -perm /mode | Almeno un bit specificato è impostato |
| -user name | Di proprietà dell'utente (nome o UID) |
| -group name | Di proprietà del gruppo (nome o GID) |
| -nouser | Nessun utente corrispondente in /etc/passwd |
| -nogroup | Nessun gruppo corrispondente in /etc/group |
Azioni
Esempi di Azioni
find . -name "*.log" -print # stampa percorsi (default)
find . -name "*.tmp" -delete # elimina file corrispondenti
find . -type f -ls # lista dettagliata
find . -name "*.txt" -print0 # output delimitato da null
find . -type f -printf "%p %s\n" # formato personalizzato (GNU)
Riferimento Azioni
| -print | Stampa percorso (delimitato da newline) |
| -print0 | Stampa percorso (delimitato da null, sicuro per xargs) |
| -ls | Stampa dettagli file (come ls -dils) |
| -delete | Elimina file corrispondenti (implica -depth) |
| -printf format | Formato output personalizzato (GNU): %p percorso, %s dimensione |
| -fprint file | Scrive percorsi su file |
| -quit | Esce dopo la prima corrispondenza |
Combinare Test
Operatori Logici
find . -name "*.py" -type f # AND implicito
find . -name "*.py" -a -size +10k # AND esplicito
find . -name "*.py" -o -name "*.js" # OR
find . ! -name "*.log" # NOT
find . \( -name "*.py" -o -name "*.js" \) -type f
Riferimento Operatori
| expr1 expr2 / expr1 -a expr2 | AND — entrambi devono essere veri (default) |
| expr1 -o expr2 | OR — almeno uno deve essere vero |
| ! expr / -not expr | NOT — nega l'espressione |
| \( expr \) | Raggruppa espressioni (escape parentesi nella shell) |
| Ordine valutazione | Da sinistra a destra; -a lega più stretto di -o |
Exec e Delete
Esempi Exec
find . -name "*.sh" -exec chmod +x {} \;
find . -name "*.log" -exec rm {} +
find . -type f -exec grep -l "TODO" {} +
find . -name "*.bak" -ok rm {} \; # chiede conferma
find . -name "*.tmp" -print0 | xargs -0 rm
Riferimento Exec
| -exec cmd {} \; | Esegui cmd una volta per file ({} = percorso file) |
| -exec cmd {} + | Esegui cmd con più file insieme (più veloce) |
| -ok cmd {} \; | Come -exec ma chiede conferma |
| -execdir cmd {} \; | Esegui cmd dalla directory del file |
| xargs -0 | Abbinare a -print0 per elaborazione batch sicura |
| -delete | Elimina file; processa prima i più profondi |
Profondità e Pruning
Esempi Profondità e Prune
find . -maxdepth 1 -type f # solo directory corrente
find . -mindepth 2 -name "*.py" # salta livello superiore
find . -name ".git" -prune -o -print # salta dir .git
find . -depth -name "*.tmp" -delete # processa figli prima
Opzioni Profondità
| -maxdepth N | Scendi al massimo N livelli (0 = solo percorso iniziale) |
| -mindepth N | Non applicare test a livelli inferiori a N |
| -depth | Processa contenuto directory prima della directory stessa |
| -prune | Non scende nella directory corrispondente |
| -mount / -xdev | Non attraversa i confini del filesystem |
| -follow / -L | Segue i link simbolici |
Pattern Comuni
One-Liner
find . -name "*.pyc" -delete # pulisci bytecode Python
find . -type f -size 0 -delete # rimuovi file vuoti
find . -mtime +30 -name "*.log" -delete # elimina log vecchi
find . -type f -name "*.md" | wc -l # conta file Markdown
find . -type d -empty -delete # rimuovi dir vuote
Ricette
| Trova file più grandi | find . -type f -printf '%s %p\n' | sort -rn | head |
| Trova duplicati per nome | find . -type f | awk -F/ '{print $NF}' | sort | uniq -d |
| Rinomina estensione | find . -name '*.txt' -exec rename 's/.txt/.md/' {} + |
| Trova link simbolici rotti | find . -xtype l |
| Archivia file recenti | find . -mtime -7 -print0 | tar czf recent.tar.gz --null -T - |
| Cerca in file codice | find . -name '*.py' -exec grep -l 'pattern' {} + |