Il comando per trovare (e cancellare) i file doppioni in una cartella
Un comando da Terminale che confronta il contenuto dei file, non il nome, per trovare le copie doppie in una cartella e cancellarle lasciandone una sola.
Perché conta
Cercare i doppioni a mano, per nome, non basta: due copie identiche possono chiamarsi in modo diverso. Un comando che guarda il contenuto le trova tutte, in una cartella piena di migliaia di file.
In pratica
Conviene usarlo prima di fare un backup o di liberare spazio su un disco pieno: elimina le copie inutili senza doverle cercare a occhio una per una.
Quando una cartella come Download o Documenti si riempie di copie degli stessi file, scaricati due volte o salvati due volte da app diverse, ritrovarle a mano è lento: due file possono avere nomi diversi ("ricevuta.pdf" e "ricevuta (1).pdf") pur essendo identici dentro. Questo comando le trova confrontando il contenuto, non il nome, e in un secondo passaggio le cancella lasciandone una sola copia per gruppo. Si usa dal Terminale di macOS o di Linux: servono solo find e awk, già installati su entrambi. Su Windows serve installare Git Bash o WSL (un sistema che fa girare Linux dentro Windows), perché il Prompt dei comandi normale non li ha.
Il comando
``` cd "$HOME/Downloads"
find . -type f -not -name "doppioni-trovati.txt" -exec cksum {} \; | awk ' { key = $1 "_" $2 file = substr($0, length($1) + length($2) + 3) count[key]++ if (count[key] == 1) { first[key] = file; next } print file }' > doppioni-trovati.txt
cat doppioni-trovati.txt
# Controlla l'elenco sopra: sono i file che verrebbero cancellati (ne resta uno per gruppo). # Quando sei sicuro, togli il cancelletto dalla riga qui sotto e rilancia tutto il comando per cancellarli davvero. # while IFS= read -r file; do rm -v -- "$file"; done < doppioni-trovati.txt ```
Come adattarlo
La prima riga, cd "$HOME/Downloads", dice quale cartella pulire: cambiala con il percorso che ti serve, per esempio cd "$HOME/Documents/Fatture". Il comando controlla anche le sottocartelle, non solo quella indicata. La prima esecuzione fa solo l'elenco, dentro doppioni-trovati.txt: è un passaggio di sicurezza, così puoi controllare prima di cancellare qualsiasi cosa. Quando l'elenco ti convince, togli il carattere # dall'ultima riga (quella con rm) e lancia di nuovo tutto il comando: quella riga cancella davvero i file elencati.
Cosa ottieni
Su una cartella di esempio con una ricevuta salvata tre volte (con nomi diversi, in cartelle diverse) e una foto salvata due volte, il comando ha scritto in doppioni-trovati.txt:
``` ./foto1_copy.jpg.txt ./sub/ricevuta_copia.txt ./ricevuta.pdf.txt ```
Un file diverso, con contenuto diverso, non è comparso: solo le copie vere e proprie. Dopo aver tolto il cancelletto dalla riga di cancellazione, i tre file sono stati rimossi e per ognuno dei due gruppi è rimasta una sola copia.
Se non funziona
Se il Terminale risponde "comando non trovato" per find, awk o cksum, sei probabilmente su Windows: apri Git Bash o il terminale di WSL invece del Prompt dei comandi. Se doppioni-trovati.txt resta vuoto anche se sai che ci sono doppioni, controlla di aver messo il percorso giusto nella prima riga, e ricorda che il confronto guarda il contenuto: due foto che sembrano uguali ma sono state salvate con una compressione diversa non risultano identiche. Se togli il cancelletto e il comando risponde "permesso negato" su un file, quel file è probabilmente aperto in un'altra applicazione: chiudila e riprova.