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 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
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.

Hors 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
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.

Hors ligne