#1 Le 21/05/2019, à 23:02
- Arbiel
[Résolu] Comparaison du contenu de deux répertoires
Bonsoir
Pour comparer le contenu de deux répertoires, je crée deux fichiers contenant chacun la liste des chemins des fichiers par une commande telle que
sed -r "s~$(sudo find "${rvl1}" | tee "${liste}" | sed -n 1p)~~" < "${liste}" | sort > "${fic1}"
rvl1 est un des deux répertoires,
sudo find "${rvl1}"
me donne la liste de tous les chemins vers les fichiers de tous les répertoires et sous répertoires, liste que je duplique dans "${liste}.
La première ligne est le chemin d'accès au répertoire que je retire par
sed -r "s~$(sudo find "${rvl1}" | tee "${liste}" | sed -n 1p)~~" < "${liste}"
puis je trie les lignes par ordre alphabétique (pour pouvoir comparer les listes par meld)
Je traite un peu différemment le second répertoire
sed -r "s~$(sudo find "${rvl2}" | tee "${liste}" | sed -n 1p)~~" < "${liste}" | tr "[](){}+|" "." | sort > "${fic2}"
J'extraie ensuite les lignes de fic1 qui sont absentes de fic2 par
grep -v -f "${fic2}" "${fic1}"
Je n'obtiens rien en sortie, alors que meld me montre des différences, autres que les lignes dont j'ai traduit les caractères par tr "[](){}+|" "."
Globalement voici mon script
function compare {
local dev1="${1}"
local dev2="${2}"
local rvl1 rvl2 fic1 fic2
local comp nom
rvl1="$(mktemp -d --suffix=svg)"
rvl2="$(mktemp -d --suffix=svg)"
fic1="$(mktemp)"
echo "${fic1}"
fic2="$(mktemp)"
echo "${fic2}"
liste="$(mktemp)"
comp=true
sudo cryptsetup isLuks "${dev1}" && {
nom="$(grep "${dev1}" /etc/crypttab | cut -d " " -f 1)";
! sudo cryptdisks_start "${nom}" && comp=false || dev1="/dev/mapper/${nom}" ; }
sudo cryptsetup isLuks "${dev2}" && {
nom="$(grep "${dev2}" /etc/crypttab | cut -d " " -f 1)";
! sudo cryptdisks_start "${nom}" && comp=false || dev2="/dev/mapper/${nom}" ; }
sudo mount "${dev1}" "${rvl1}"
sudo mount "${dev2}" "${rvl2}"
# meld <(sed -r "s~$(sudo find "${rvl1}" | tee /tmp/liste1 | sed -n 1p)~~" < /tmp/liste1 | sort) <(sed -r "s~$(sudo find "${rvl2}" | tee /tmp/liste2 | sed -n 1p)~~" < /tmp/liste2 | sort)
sed -r "s~$(sudo find "${rvl1}" | tee "${liste}" | sed -n 1p)~~" < "${liste}" | sort > "${fic1}"
sed -r "s~$(sudo find "${rvl2}" | tee "${liste}" | sed -n 1p)~~" < "${liste}" | tr "[](){}+|" "." | sort > "${fic2}"
# grep -v -f <(sed -r "s~$(sudo find "${rvl2}" | tee /tmp/liste2 | sed -n 1p)~~" < /tmp/liste2 | tr "[]" "." |sort) <(sed -r "s~$(sudo find "${rvl1}" | tee /tmp/liste1 | sed -n 1p)~~" < /tmp/liste1 | sort)
grep -v -f "${fic2}" "${fic1}"
sudo umount "${rvl1}" ; # rmdir "${rvl1}" ;
sudo umount "${rvl2}" ; # rmdir "${rvl2}" ;
# rm "${liste}"
}
"${@}"
Bien évidemment, je ne tiens pas particulièrement à ce script, et toute autre méthode me permettant de trouver les fichiers de l'un absents de l'autre est la bienvenue.
Mais j'aimerais également savoir ce que je dois modifier pour obtenir ce que je cherche.
Arbiel
Dernière modification par Arbiel (Le 24/05/2019, à 13:12)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 21/05/2019, à 23:09
- Roschan
Re : [Résolu] Comparaison du contenu de deux répertoires
comparer les listes par meld
Si mes souvenirs sont bons, on aussi comparer directement les dossiers avec Meld
Hors ligne
#3 Le 21/05/2019, à 23:12
- Watael
Re : [Résolu] Comparaison du contenu de deux répertoires
salut,
tu as essayé diff ?
diff rep1/ rep2/
Dernière modification par Watael (Le 21/05/2019, à 23:13)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#4 Le 22/05/2019, à 10:16
- Arbiel
Re : [Résolu] Comparaison du contenu de deux répertoires
Bonjour
Merci à vous deux pour vos propositions.
Il est probable que les volumes que je traite soient trop importants.
diff rep1/ rep2/
ne trouve pas de différences, même après que j'ai volontairement supprimé un fichier de l'un des deux répertoires (en fait chacun est le montage d'un volume logique ou d'une partition, avec des milliers de fichiers). Vue la vitesse à laquelle le traitement s'est déroulé, je pense que la commande telle que je l'ai exécutée n'a pas inspecté le contenu "au plus profond".
[Édit] ; j'ai relancé la commande avec l'option -r, et au vu des premiers résultats (l'exécution n'est pas encore terminée), il me semble que j'obtiens ce que je cherche
[/Édit]
meld peut effectivement comparer des répertoires en les présentant dans deux panneaux. J'ai dû l'arrêter après de longues minutes.
diff appliqué sur les fichiers produits par les commandes find produit une liste assez longue sur laquelle je ne me suis que rapidement penché.
Arbiel
Dernière modification par Arbiel (Le 22/05/2019, à 10:45)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#5 Le 22/05/2019, à 12:52
- Watael
Re : [Résolu] Comparaison du contenu de deux répertoires
+1
diff --recursive rep1/ rep2/
pour les fichiers :
if diff --brief fich1 fich2 &>/dev/null
then
: faire avec fichiers identiques
else
: faire avec fichiers différents
fi
Connected \o/
Welcome to sHell. · eval is evil.
En ligne