find
find cerca file e cartelle scorrendo il filesystem, con filtri su nome, tipo, dimensione, data, permessi e proprietario.
Sintassi
find [percorso] [criteri] [azione]
Cercare per nome
find /home -name "documento.txt"
find . -name "*.log"
find . -iname "*.jpg"
-iname ignora maiuscole e minuscole.
Cercare per tipo
find . -type f
find . -type d
find . -type l
f file, d cartella, l link simbolico.
Cercare per dimensione
find . -size +100M
find . -size -10k
find . -size 0
+ significa più grande di, - più piccolo di. Unità: k, M, G.
Cercare per data
find . -mtime -1
find . -mtime +30
find . -mmin -60
find . -newer riferimento.txt
-mtime -1: modificati nelle ultime 24 ore-mtime +30: modificati più di 30 giorni fa-mmin -60: modificati negli ultimi 60 minuti
Cercare per permessi e proprietario
find / -perm -4000 -type f 2>/dev/null
find . -user michele
find . -group www-data
find . -perm 777
Il primo comando trova i file con bit SUID, utile per audit di sicurezza.
Limitare la profondità
find . -maxdepth 1 -type f
find . -mindepth 2 -maxdepth 3 -name "*.conf"
Combinare i criteri
find . -name "*.log" -size +10M
find . -name "*.jpg" -o -name "*.png"
find . -type f ! -name "*.txt"
Per impostazione predefinita i criteri sono in AND. -o è OR, ! è NOT.
Azioni
Eliminare (verifica sempre prima senza -delete):
find . -name "*.tmp"
find . -name "*.tmp" -delete
Eseguire un comando su ogni risultato:
find . -name "*.sh" -exec chmod +x {} \;
find . -name "*.log" -exec ls -lh {} +
find . -type f -name "*.txt" -exec grep -l "parola" {} +
Con \; il comando viene eseguito una volta per file, con + una volta sola con tutti i file (più veloce).
Gestire nomi con spazi in modo sicuro:
find . -name "*.bak" -print0 | xargs -0 rm
Nascondere gli errori di permesso
find / -name "nginx.conf" 2>/dev/null
Alternative
locate nomeè molto più veloce perché usa un indice (aggiornalo consudo updatedb)fdè un'alternativa moderna e più semplice (pacman -S fdsu Arch)