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
pathDirectory di partenza (default: directory corrente)
testCondizione per filtrare file (-name, -type, ecc.)
actionCosa 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 patternBasename corrisponde a glob shell (case-sensitive)
-iname patternBasename corrisponde a glob (case-insensitive)
-path patternPercorso completo corrisponde a glob shell
-ipath patternPercorso completo corrisponde a glob (case-insensitive)
-regex patternPercorso completo corrisponde a espressione regolare
-iregex patternPercorso 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 fFile regolare
-type dDirectory
-type lLink simbolico
-type bDispositivo a blocchi
-type cDispositivo a caratteri
-type pPipe con nome (FIFO)
-type sSocket
-emptyFile 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 +/-NcDimensione in byte (c), kilobyte (k), megabyte (M), gigabyte (G)
-mtime +/-NModificato N*24 ore fa (+più vecchio, -più recente)
-atime +/-NAcceduto N*24 ore fa
-ctime +/-NStato cambiato N*24 ore fa
-mmin +/-NModificato N minuti fa
-newer fileModificato più di recente del file
-newermt dateModificato 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 modeCorrispondenza esatta dei permessi
-perm -modeTutti i bit specificati sono impostati
-perm /modeAlmeno un bit specificato è impostato
-user nameDi proprietà dell'utente (nome o UID)
-group nameDi proprietà del gruppo (nome o GID)
-nouserNessun utente corrispondente in /etc/passwd
-nogroupNessun 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
-printStampa percorso (delimitato da newline)
-print0Stampa percorso (delimitato da null, sicuro per xargs)
-lsStampa dettagli file (come ls -dils)
-deleteElimina file corrispondenti (implica -depth)
-printf formatFormato output personalizzato (GNU): %p percorso, %s dimensione
-fprint fileScrive percorsi su file
-quitEsce 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 expr2AND — entrambi devono essere veri (default)
expr1 -o expr2OR — almeno uno deve essere vero
! expr / -not exprNOT — nega l'espressione
\( expr \)Raggruppa espressioni (escape parentesi nella shell)
Ordine valutazioneDa 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 -0Abbinare a -print0 per elaborazione batch sicura
-deleteElimina 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 NScendi al massimo N livelli (0 = solo percorso iniziale)
-mindepth NNon applicare test a livelli inferiori a N
-depthProcessa contenuto directory prima della directory stessa
-pruneNon scende nella directory corrispondente
-mount / -xdevNon attraversa i confini del filesystem
-follow / -LSegue 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ù grandifind . -type f -printf '%s %p\n' | sort -rn | head
Trova duplicati per nomefind . -type f | awk -F/ '{print $NF}' | sort | uniq -d
Rinomina estensionefind . -name '*.txt' -exec rename 's/.txt/.md/' {} +
Trova link simbolici rottifind . -xtype l
Archivia file recentifind . -mtime -7 -print0 | tar czf recent.tar.gz --null -T -
Cerca in file codicefind . -name '*.py' -exec grep -l 'pattern' {} +