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 \r\n, \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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Manuel Pégourié-Gonnard
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.
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/
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.
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
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
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