Trouver et supprimer des fichiers en double dans OSx avec un script

À partir de: http://www.chriswrites.com/2012/02/how-to-find-and-delete-duplicate-files-in-mac-os-x/ Comment puis-je modifier ceci pour supprimer uniquement la première version de Le fichier qu'il voit.

Ouvrez le terminal depuis Spotlight ou le dossier Utilitaires Passez au répertoire (dossier) dans lequel vous souhaitez rechercher (y compris les sous-dossiers) à l'aide de la commande cd. À l'invite de commande, tapez le CD par exemple cd ~ / Documents pour modifier le répertoire dans votre dossier de documents à la maison À l'invite de commandes, tapez la commande suivante:

find . -size 20 \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif – /tmp/f.tmp > duplicates.txt 

Cette méthode utilise une somme de contrôle simple pour déterminer si les fichiers sont identiques. Les noms des éléments en double seront répertoriés dans un fichier nommé duplicates.txt dans le répertoire actuel. Ouvrez ceci pour voir les noms des fichiers identiques Il existe maintenant différentes façons de supprimer les doublons. Pour supprimer tous les fichiers dans le fichier texte, à l'invite de commande, tapez:

 while read file; do rm "$file"; done < duplicates.txt 

Tout d'abord, vous devrez réorganiser la première ligne de commande afin que l'ordre des fichiers trouvés par la commande find soit maintenu:

 find . -size 20 ! -type d -exec cksum {} \; | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | sort | uniq -d | grep -hif – /tmp/f.tmp > duplicates.txt 

(Remarque: à des fins de test dans ma machine, j'ai utilisé la find . -type f -exec cksum {} \; )

Deuxièmement, une façon d'imprimer tout, sauf le premier, est à l'aide d'un fichier auxiliaire, disons /tmp/f2.tmp . Ensuite, nous pourrions faire quelque chose comme:

 while read line; do checksum=$(echo "$line" | cut -f 1,2 -d' ') file=$(echo "$line" | cut -f 3 -d' ') if grep "$checksum" /tmp/f2.tmp > /dev/null; then # /tmp/f2.tmp already contains the checksum # print the file name # (printf is safer than echo, when for example "$file" starts with "-") printf %s\\n "$file" else echo "$checksum" >> /tmp/f2.tmp fi done < duplicates.txt 

Assurez-vous que /tmp/f2.tmp existe et est vide avant de l'exécuter, par exemple dans les commandes suivantes:

 rm /tmp/f2.tmp touch /tmp/f2.tmp 

J'espère que ceci aide =)

Une autre option est d'utiliser fdupes:

 brew install fdupes fdupes -r . 

fdupes -r . Trouve les fichiers en double de manière récursive sous le répertoire actuel. Ajoutez -d pour supprimer les doublons – vous serez invité à quels fichiers garder; Si au lieu de cela vous ajoutez -dN , fdupes conservera toujours le premier fichier et supprimer d'autres fichiers.

J'ai écrit un script qui renomme vos fichiers pour qu'ils correspondent à un hash de leurs contenus.

Il utilise un sous-ensemble des octets du fichier, donc c'est rapide, et s'il y a une collision, il ajoute un compteur au nom comme ceci:

 3101ace8db9f.jpg 3101ace8db9f (1).jpg 3101ace8db9f (2).jpg 

Cela permet de réviser et de supprimer facilement des doublons, sans faire confiance aux logiciels de quelqu'un d'autre avec vos photos plus que vous ne le souhaitez.

Script: https://gist.github.com/SimplGy/75bb4fd26a12d4f16da6df1c4e506562

Entrez la description de l'image ici