# Regrouper deux fichiers commençant par le même md5

**URL:** <https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318>\
**Category:** Support Debian\
**Created:** [Décembre 14, 2023, 5:15 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318 "2023-12-14T17:15:54Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Décembre 14, 2023, 5:15 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/1 "2023-12-14T17:15:54Z")

</div>

bonjour  
j’ai deux fichiers créés par md5sum contenant une liste très longue de fichiers

dans le premier ( a.md5)

**d17e2eddfebe67eac290c8c499e6c15f** 000001a009999/0001\_0093/IMG\_00020.JPG  
24656b1ea5114a9e42b7c85371072a5b 000001a009999/0001\_0093/IMG\_00019.JPG  
ac76baf7ed0612edb96381cd85270f06 000001a009999/0001\_0093/IMG\_00021.JPG

dans le deuxième (b.md5)

8ce03061e79c446c1d11b544b2cd6db4 Z000001a009999-aranger/RIEN RATEE VIDE/IMAGE\_01063.JPG  
d101edccf5f8392751aab04716d0b976 Z000001a009999-aranger/RIEN RATEE VIDE/IMAGE\_01036.JPG  
**d17e2eddfebe67eac290c8c499e6c15f** Z000001a009999/0001\_0093/IMG\_00020.JPG  
…

je ne me rappelle plus quelle fonction bash permet de concaaténer pour obtenir une seule ligne quand ça commence pareil :  
**d17e2eddfebe67eac290c8c499e6c15f** 000001a009999/0001\_0093/IMG\_00020.JPG Z000001a009999/0001\_0093/IMG\_00020.JPG  
et rien de spécial ( je préférerais rien du tout) quand on n’a pas de correspoindance de md5

PS  
en fait, je cherche juste à avoir un fichier qui contient une partie de b.md5 correspondant aux fichiers existant dans a.md5

merci par avance

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Décembre 14, 2023, 6:55 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/2 "2023-12-14T18:55:42Z")

</div>

```auto
cat a.md5 b.md5 | sort -u > c.md5

```

mais deux fichiers de noms différents avec même md5 / à clarifier, le nom du répertoire étant intégré au nom de fichier → fichiers sources à nettoyer.

```nohighlight
d17e2eddfebe67eac290c8c499e6c15f 000001a009999/0001_0093/IMG_00020.JPG
d17e2eddfebe67eac290c8c499e6c15f Z000001a009999/0001_0093/IMG_00020.JPG

```

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Décembre 14, 2023, 7:27 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/3 "2023-12-14T19:27:20Z")

</div>

merci mais ce n’est pas ce que je recherche : les deux fichiers sont identiques mais pas à la même place

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Décembre 14, 2023, 7:35 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/4 "2023-12-14T19:35:36Z")

</div>

> [@dindoun](#):
>
> les deux fichiers sont identiques

On a donc effectivement pas la même définition du mot ‹&nbsp;identique&nbsp;›.

- dans le premier (a.md5)

```auto
d17e2eddfebe67eac290c8c499e6c15f 000001a009999/0001_0093/IMG_00020.JPG

```

- dans le deuxième (b.md5)

```auto
d17e2eddfebe67eac290c8c499e6c15f Z000001a009999/0001_0093/IMG_00020.JPG

```

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Décembre 14, 2023, 7:35 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/5 "2023-12-14T19:35:37Z")

</div>

fdupes ?

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Décembre 14, 2023, 7:49 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/6 "2023-12-14T19:49:39Z")

</div>

salut  
ce qui est identique, c’est le md5 du fichier , pas la ligne du mds5um

fdupes fait en gros ce que je veux au final, mais je n’arrive pas toujours à ce qu’il détruise dans le dossier que je veux , donc je veux le faire à la main ( si je fais `fdupes -d -N -r rep1/ rep2/` il peut détruire deux fichiers identiques dans rep1/ , parfois il garde celui dans rep2/ , il ne tient pas compte des sous-répertoires ( parfois je veux détruire rep2/a.jpg si rep1/a.jpg existe mais ne pas détruire rep2/dd/a.jpg si rep1/a.jpg existe …)

j’ai trouvé un début de solution ( pas ce que je cherchais ) :  
il faut d’abord ranger les fichiers .md5 contenant les lignes créées par md5sum  
puis :  
`cat b.md5|sed 's# .*##'|while read ligne; do look "$ligne" a.md5 ;done`

```
$ grep 353118989f82aad56432e73de6110255 a.md5
353118989f82aad56432e73de6110255 jpeg/IMG_02502.JPG

$ grep 353118989f82aad56432e73de6110255 b.md5
353118989f82aad56432e73de6110255 jpeg/IMG_02502.JPG
353118989f82aad56432e73de6110255 N/jpeg/IMG_02502.JPG

$ look 353118989f82aad56432e73de6110255 a.md5 
353118989f82aad56432e73de6110255 jpeg/IMG_02502.JPG
```

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Décembre 15, 2023, 12:04 UTC](https://www.debian-fr.org/t/regrouper-deux-fichiers-commencant-par-le-meme-md5/89318/7 "2023-12-15T00:04:04Z")

</div>

finalement, n’ayant pas retrouver la commande que je cherchais j’ai fait ça :

```
mkdir -p /tmp/aa;
cat b.md5|while read ligne;do
md5=$(echo "$ligne"|sed 's# .*##');
res="$(look $md5 000001a009999.md5)";
if [A"$res" != A]; then 
fich2="$(echo $ligne|sed 's#^[0-9a-f]* *##')";
echo "$fich2" >> /tmp/aa/LOG ; 
mv "$fich2" /tmp/aa ; 
echo -n "." ;
fi;
done 

```

a.md5 est créé avec  
`find dossier1 -type f |while read fich; do md5sum "$fich" >> a.md5 ; done`

pour chaque ligne de b.md5, je met le md5 dans $md5; je regarde si le md5 est dans a.md5 et je met le résultat dans $res ;  
si on a un résultat; alors je déplace le fichier $fich2 de b.md5 dans le dossier /tmp/aa/;  
j’écris un log et un petit point pour être sur que ça tourne

pas génial car je suis obligé de relire le fichier a.md5 à chaque ligne de b.md5 mais ils ne font que quelques milliers de lignes.

les commandes paste et join font un peu ça :  
paste a.txt b.txt : \>c.txt ; la nième ligne de c.txt contient la nième ligne de a.txt suivi de la la nième ligne de b.txt

join a.txt b.txt : \>c.txt ; si le premier champ de la nième ligne de a.txt et de b.txt contiennent la même chose , alors la nième ligne de c.txt aussi suivi de la nième ligne de a.txt suivi de la la nième ligne de b.txt

exemple :  
si a.txt contient  
1 a  
10 aa  
et b.txt  
1 b  
10 bb  
alors  
$ join a.txt b.txt  
1 a b  
10 aa bb  
$ paste a.txt b.txt  
1 a 1 b  
10 aa 10 bb
