Déduplication de fichiers

Le
Kevin Denis
Bonjour,

j'ai plusieurs répertoires plats (sans sous-répertoires) qui ont
plusieurs centaines de fichiers chacun.

Je cherche un moyen simple qui me donnerait la liste des fichiers
en double dans chacun de ces répertoires.

J'ai donc écrit:
#! /bin/bash
OLD_MD5=nonexistent
for liste in `ls -1 | xargs md5sum | sort | sed s/ /:/g`
do
MD5=`echo $liste | cut -d ":" -f1`
[ "$MD5" = "$OLD_MD5" ] && echo $liste | cut -d ":" -f2
OLD_MD5="$MD5"
done

qui fonctionne pas trop mal lorsque les fichiers sont parfaitement
identiques. En première passe, c'est très rapide et fiable.

Néanmoins, ces fichiers proviennent de plusieurs plateformes (mac, win,
linux) et j'ai pas mal de problèmes concernant les fins de fichiers et
les fins de lignes.

Ainsi, un fichier peut se terminer par , , . Bien évidemment,
les md5sum sont différents.

De plus, certains fichiers de plusieurs lignes peuvent différer
uniquement par des ajouts de ligne vides (entre chaque ligne, ou en
fin de fichiers).

Ma question:
Y'a t'il une méthode pour trouver tous les fichiers identiques?
Le but est uniquement de les lister pour traitement futur.

Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Manuel Pégourié-Gonnard
Le #19407851
Kevin Denis scripsit:

Néanmoins, ces fichiers proviennent de plusieurs plateformes (mac, win,
linux) et j'ai pas mal de problèmes concernant les fins de fichiers et
les fins de lignes.

Ainsi, un fichier peut se terminer par rn, r, n. Bien évidemment,
les md5sum sont différents.



Par contre, diff avec les bonnes options devrait se rendre compte qu'ils
sont identiques.


--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Stephane CHAZELAS
Le #19409511
2009-05-25, 13:14(+00), Kevin Denis:
Bonjour,

j'ai plusieurs répertoires plats (sans sous-répertoires) qui ont
plusieurs centaines de fichiers chacun.

Je cherche un moyen simple qui me donnerait la liste des fichiers
en double dans chacun de ces répertoires.

J'ai donc écrit:
#! /bin/bash
OLD_MD5=nonexistent
for liste in `ls -1 | xargs md5sum | sort | sed s/ /:/g`
do
MD5=`echo $liste | cut -d ":" -f1`
[ "$MD5" = "$OLD_MD5" ] && echo $liste | cut -d ":" -f2
OLD_MD5="$MD5"
done

qui fonctionne pas trop mal lorsque les fichiers sont parfaitement
identiques. En première passe, c'est très rapide et fiable.

Néanmoins, ces fichiers proviennent de plusieurs plateformes (mac, win,
linux) et j'ai pas mal de problèmes concernant les fins de fichiers et
les fins de lignes.

Ainsi, un fichier peut se terminer par rn, r, n. Bien évidemment,
les md5sum sont différents.

De plus, certains fichiers de plusieurs lignes peuvent différer
uniquement par des ajouts de ligne vides (entre chaque ligne, ou en
fin de fichiers).

Ma question:
Y'a t'il une méthode pour trouver tous les fichiers identiques?
Le but est uniquement de les lister pour traitement futur.


[...]

Avec des outils GNU:

md5sum * | sort | uniq -D -w32

si tu consideres identiques deux fichiers qui different par les
types de sauts de ligne et le nombre de lignes vides, tu peux
les /normaliser/ avant, par exemple en enlevant les lignes vides
et changer les sauts de lignes en n:

for f in *; do
tr -s 'rn' 'nn' < "$f" | md5sum | {
read a b && printf '%sn' "$a $f"
}
done | sort | uniq -D -w32

--
Stéphane
Publicité
Poster une réponse
Anonyme