Ultima modifica:
Visto che il tuo avatar è un pinguino al computer, do per scontato che stai usando Linux. Supponendo che il la tua cartella si trova in ~/source, questo oneliner dovrebbe copiarti i file in ~/dest senza ricopiare i file duplicati
Cambia ~/source/ e ~/dest/ con quello che ti pare, ma ricordati il backslash finale. La cartella di destinazione deve esistere. Se sei coraggioso puoi sostituire cp con mv per spostare i files, ma visto che lo script non l'ho testato e non sono nemmeno sicuro che funzioni correttamente... lascia cp e sii cauto, meglio ancora se fai qualche test prima di lanciarlo sulla tua directory da migliaia di files. L'approccio usato è quello dscritto da nfvblog: calcola una checksum sha1, quindi file con nome diverso e contenuto uguale risultano come lo stesso file.
Mi raccomando, testa prima di eseguire. Toh, magari fai così:
e controlla che l'output sia ragionevole. Poi lancia la stessa menata seguita da
EDIT: Sto avendo qualche problema a postare il codice, il forum mi blocca. Nello script, sostituisci pippo con substr, se lo faccio io il forum non mi lascia postare.
Bash:
find ~/source/ -type f -print0 | xargs -0 -L1 -P8 sha1sum | awk '{if (cnt[$1] == 0){cnt[$1]++; $1=""; system("cp "pippo($0, 2)" ~/dest/")}}'
Mi raccomando, testa prima di eseguire. Toh, magari fai così:
Bash:
find ~/source/ -type f -print0 | xargs -0 -L1 -P8 sha1sum | awk '{if (cnt[$1] == 0){cnt[$1]++; $1=""; print "pippo($0, 2)"}}'
| wc -l
e controlla che il numero di files che andrà a copiare sia ragionevole secondo le tue aspettative. Se qualcun altro del forum lo vuole testare al posto tuo, meglio ancora.EDIT: Sto avendo qualche problema a postare il codice, il forum mi blocca. Nello script, sostituisci pippo con substr, se lo faccio io il forum non mi lascia postare.