tfe Homepage

12/09/2012

Hard link fichiers identique

Script du jour:

Je voulais récupérer de l'espace disque en faisant un "hard link" sur les fichiers ayant une même somme de hashage md5.
Cela peut être très utile si vous avez des dossiers contenant des images en double par exemple...

$ find . -type f -exec md5sum {} ; | sort |perl -ape 'if($F[0] eq $prev){
print "CREATE HARDLINK BETWEEN ""$file"" and """.join(" ",@F[1..@F-1])."""
"; 
unlink $file; link @F[1..@F-1], $file;} $prev=$F[0];$file=join(" ",@F[1..@F-1]); $_=""'

Le script utilise find pour lister les fichiers (avec sous-dossiers) et leur somme de hashage md5.

Le résultat est envoyé à sort: il se chargera de regrouper les doublons. perl va alors supprimer un des fichiers, pour le remplacer par un hardlink de l'autre fichier.

Résultat de l'éxécution du script:

CREATE HARDLINK  "./board-848/board-848241.jpg" and "./board-850/board-850958-30.jpg"
CREATE HARDLINK  "./board-850/board-850958-30.jpg" and "./board-852/board-852049-30.jpg"
CREATE HARDLINK  "./board-852/board-852049-30.jpg" and "./board-845/board-845658-8.jpg"
CREATE HARDLINK  "./board-845/board-845658-8.jpg" and "./board-859/board-859852-69.jpg"
CREATE HARDLINK  "./board-859/board-859852-69.jpg" and "./board-854/board-854166-84.jpg"
CREATE HARDLINK  "./board-854/board-854166-84.jpg" and "./board-850/board-850958-80.jpg"
CREATE HARDLINK  "./board-850/board-850958-80.jpg" and "./board-852/board-852049-80.jpg"
CREATE HARDLINK  "./board-852/board-852049-80.jpg" and "./board-854/board-854165-17.jpg"
CREATE HARDLINK  "./board-854/board-854165-17.jpg" and "./board-838/board-838275-2.jpg"
CREATE HARDLINK  "./board-838/board-838275-2.jpg" and "./board-856/board-856927-43.jpg"