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

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

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.

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

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

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

  • dans le premier (a.md5)
d17e2eddfebe67eac290c8c499e6c15f 000001a009999/0001_0093/IMG_00020.JPG
  • dans le deuxième (b.md5)
d17e2eddfebe67eac290c8c499e6c15f Z000001a009999/0001_0093/IMG_00020.JPG

fdupes ?

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

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