Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/08/2020, à 14:44

Akatu

Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Bonjour,

J'ai un dossier A qui contient des icônes ayant comme extensions .png
Le dossier B contient des icônes ayant des extensions .png et .webp

J'ai un écart de 1 fichier entre les deux et je cherche à savoir lequel manque. Je cherche en vain (pour le moment) une commande permettant de faire un diff mais sans prendre en compte les extensions.

Par exemple, le fichier coucou.png dans le dossier A doit être considéré comme égal au fichier coucou.webp dans le dossier B.
Merci d'avance pour votre aide.


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#2 Le 29/08/2020, à 14:58

sputnick

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Salut:

diff -aqr A B

Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr

Hors ligne

#3 Le 29/08/2020, à 15:01

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Salut,
J'ai déjà testé diff mais ça ne fonctionne pas bien pour ignorer le contrôle des extensions :
1598714537.png


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#4 Le 29/08/2020, à 15:02

sputnick

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

En lisant mieux:

#!/bin/bash

for i in A/*.*; do
    file="${i##*/}" 
    compgen -G "B/${file%.*}"* &>/dev/null || echo  "B/${file%.*} manquant"
done

Dernière modification par sputnick (Le 29/08/2020, à 15:06)


Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr

Hors ligne

#5 Le 29/08/2020, à 15:08

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Pas de soucis ;-) mais cette fois, ça ressort des faux manquants :
1598714932.png


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#6 Le 29/08/2020, à 15:18

sputnick

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Autrement:

diff -a <(cd A; for i ; do printf "$i\n$i\n"; done | cut -d'.' -f1) <(cd B; printf '%s\n' * | cut -d'.' -f1)

Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr

Hors ligne

#7 Le 29/08/2020, à 15:31

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

ça me liste toujours 4 fichiers

$ diff -a <(cd /home/arnaud/Téléchargements/Temp/1/; for i ; do printf "$i\n$i\n"; done | cut -d'.' -f1) <(cd /home/arnaud/Téléchargements/Temp/2/; printf '%s\n' * | cut -d'.' -f1)
0a1,4
> osheden_clock_hour_andropie
> osheden_clock_hour_azulox
> osheden_clock_hour_bestia
> osheden_clock_hour_blackarmydiamond

KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#8 Le 29/08/2020, à 15:35

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

for f in A/*.jpg
do
   fichier=${f##*/}
   nom=${fichier%.*}
   test -f "B/$nom.png" -o -f "B/$nom.webp" || echo "pas de \"$nom\" sous B/"
done

?

Dernière modification par Watael (Le 29/08/2020, à 16:08)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#9 Le 29/08/2020, à 15:51

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

$ ./script.sh
pas de "*" sous B/

Je ne comprends pas le .jpg en première ligne.

Dernière modification par Akatu (Le 29/08/2020, à 15:51)


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#10 Le 29/08/2020, à 15:56

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

c'est parce que je me suis trompé : il faut remplacer par png. bien sûr. big_smile


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#11 Le 29/08/2020, à 15:57

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

:-)

Résultat avec png :

pas de "osheden_clock_hour_azulox" sous B/

=> ce qui est faux
==> seul "osheden_clock_hour_blackarmydiamond" n'est présent que dans B


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#12 Le 29/08/2020, à 16:11

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

tu peux nous montrer la liste de chaque répertoire :

cd A; \ls -1; echo "==="; cd B; \ls -1

stp.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#13 Le 29/08/2020, à 16:27

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

pas de problème, cela correspond à mes captures d'écran :

$ cd /home/arnaud/Téléchargements/Temp/1/; \ls -1; echo "==="; cd /home/arnaud/Téléchargements/Temp/2/; \ls -1
osheden_clock_hour_andropie.png
osheden_clock_hour_azulox.png
osheden_clock_hour_bestia.png
===
osheden_clock_hour_andropie.png
osheden_clock_hour_azulox.webp
osheden_clock_hour_bestia.png
osheden_clock_hour_blackarmydiamond.png

KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#14 Le 29/08/2020, à 16:39

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

donc il serait préférable de chercher dans B/ les fichiers absent sous A/, non ?
et donc inverser la boucle : pour fichier dans B/, existe-t-il nom_fichier.png ?


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#15 Le 29/08/2020, à 17:39

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Je ne pense pas car dans ce cas, il y a un fichier en plus dans B mais demain il peut y en avoir 3 dans A.
Il faut que ça marche dans les 2 sens.


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#16 Le 29/08/2020, à 17:44

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

une seule boucle ne suffira pas, alors.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#17 Le 29/08/2020, à 18:08

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

edit : construction de tableaux

$ cd /tmp/A; A=( * ); cd /tmp/B; B=( * ); cd ~; A=( "${A[@]%.*}" ); B=( "${B[@]%.*}" ); printf '%s\n' "${A[@]}"; echo '==='; printf '%s\n' "${B[@]}"                                                                                               
osheden_clock_hour_andropie                                                                                                                                                                                                                                                      
osheden_clock_hour_azulox                                                                                                                                                                                                                                                        
osheden_clock_hour_bestia                                                                                                                                                                                                                                                        
osheden_clock_hour_byWatael                                                                                                                                                                                                                                                      
===                                                                                                                                                                                                                                                                              
osheden_clock_hour_andropie                                                                                                                                                                                                                                                      
osheden_clock_hour_azulox                                                                                                                                                                                                                                                        
osheden_clock_hour_bestia                                                                                                                                                                                                                                                        
osheden_clock_hour_blackarmydiamond

edit: recherche des différences

 $ for i in "${!A[@]}"; do a="${A[i]}"; for ii in "${B[@]}"; do b="${B[ii]}"; if test "$a" = "$b"; then unset 'A['$i']' B[$ii]; B=( "${B[@]}" ); break; fi; done; done; A=( "${A[@]}" ); printf '%s\n' "${A[@]}"; echo '==='; printf '%s\n' "${B[@]}"                                                                                                                                                                                                                                                                                
osheden_clock_hour_byWatael                                                                                                                                                                                                                                                      
===                                                                                                                                                                                                                                                                              
osheden_clock_hour_blackarmydiamond

Dernière modification par Watael (Le 30/08/2020, à 10:04)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#18 Le 29/08/2020, à 19:04

kamaris

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Je n'ai pas tout bien lu, mais il me semble que ceci marcherait :

grep -vFxf <(printf '%s\n' A/* | sed -E 's%.*/|\.[^.]*%%g') <(printf '%s\n' B/* | sed -E 's%.*/|\.[^.]*%%g')

On peut inverser A et B pour avoir le résultat complémentaire.
On peut aussi mettre des caractères nuls comme séparateurs au lieu des sauts de ligne, si besoin (depuis printf jusqu'à grep, en passant par sed).

Dernière modification par kamaris (Le 29/08/2020, à 19:08)

Hors ligne

#19 Le 29/08/2020, à 19:45

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

@Watael Je me pers dans les valeurs A/B et les variables A/B du coup, je ne sais pas où exactement je dois mettre les vrais chemins.

@kamaris En effet, cela fonctionne ! J'ai mis des variables pour remplacer A et B pour faciliter les futures utilisations.
Le chiant en moi aurait aimé savoir dans quel dossier le fichier manque (ou est en plus). Ça serait la cerise sur le gateau qui est déjà très bon :-)

Merci à tous.


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#20 Le 29/08/2020, à 19:57

kamaris

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

La commande ci-dessus liste les fichiers qui sont dans B mais pas dans A.
Donc selon dans quel ordre tu passes tes variables, tu sais qui est où.

Hors ligne

#21 Le 29/08/2020, à 20:24

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

les vrais chemins doivent remplacer /tmp/A et /tmp/B.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#22 Le 30/08/2020, à 08:07

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

@kamaris Noté mais du coup, ça ne fait pas le contrôle dans les 2 sens, dommage.

@Watael Euh, il n'y a pas de "tmp" dans la commande. Désolé, je ne suis pas.


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#23 Le 30/08/2020, à 08:18

kamaris

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Mais… qu'est-ce qui t'empêche d'inverser les rôles de A et B pour aller dans un sens ou dans l'autre ?
Et tu peux concaténer les deux commandes dans une fonction qui fait les deux sens, du type :

f() {
  echo "Fichiers uniquement dans $1 :"
  grep -vFxf <(printf '%s\n' "$2"/* | sed -E 's%.*/|\.[^.]*%%g') <(printf '%s\n' "$1"/* | sed -E 's%.*/|\.[^.]*%%g')
  echo -e "\nFichiers uniquement dans $2 :"
  grep -vFxf <(printf '%s\n' "$1"/* | sed -E 's%.*/|\.[^.]*%%g') <(printf '%s\n' "$2"/* | sed -E 's%.*/|\.[^.]*%%g')
}

que tu lances par

f A B

Hors ligne

#24 Le 30/08/2020, à 08:37

Akatu

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

Certes mais en lançant une seule commande, ça fait gagner du temps.
C'est parfait comme ça, merci encore !
Bonne journée.


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#25 Le 30/08/2020, à 10:03

Watael

Re : Comparer les fichiers de 2 dossiers sans tenir compte de leurs extens.

il y en a deux (cd /tmp/...) dans la première partie du code; elle ne fait pas que montrer le contenu des répertoires, elle alimente deux tableaux, utilisés dans la deuxième partie.

Dernière modification par Watael (Le 30/08/2020, à 10:05)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne