Bonjour,
J'ai besoin de comparer deux fichiers FILE1 et FILE2 sur un serveur SERVER1, dit de référence, dans lesquels se trouvent deux arborescences à comparer.
FILE1 contient l'arborescence de référence :
Voici FILE 1 (à droite la taille) :
rep1 4096
rep1/fichier4.sh 375
rep1/fichier6.sh 551
rep1/fichier9.sh 332
rep1/rep11 4096
rep1/rep11/fichier1.sh 239
rep1/rep11/tutu.sh 19
Et FILE2 (en fait il contient l'arborescence concernée sur un second serveur), j'ai créé FILE2 sur le serveur de référence et je compare les deux fichiers :
rep2 4096
rep2/fichier4.sh 375
rep2/fichier6.sh 644
rep2/fichier9.sh 332
rep2/rep11 4096
rep2/rep11/fichier1.sh 239
rep2/rep11/rep22 4096
rep2/rep11/fichier.new.sh 6
Du fait que les bons fichiers sont dans FILE1, je souhaite faire remonter que :
1°) rep1/fichier6.sh doit avoir comme taille 551 (ou plus simplement rep1/fichier6.sh : 551)
2°) rep1/rep11/tutu.sh est dans la référence mais pas dans FILE2
3°) en revanche fichier.new.sh n'existe pas dans FILE1 donc on s'en moque, pas d'alerte le concernant.
En fait :
- tout ce qui est différent dans FILE1 par rapport à FILE2 doit remonter (c'est FILE1 la référence).
- tout ce qui existe dans FILE1 mais pas dans FILE2 doit remonter aussi.
J'ai tenté un sdiff mais c'est pas vraiment exploitable à grande échelle et pas bien lisible.
SERVER1:~ kevin$ sdiff -s FILE1 FILE2
rep2 4096 | rep1 4096
rep2/fichier4.sh 375 | rep1/fichier4.sh 375
rep2/fichier6.sh 644 | rep1/fichier6.sh 551
rep2/fichier9.sh 332 | rep1/fichier9.sh 332
rep2/rep11 4096 | rep1/rep11 4096
rep2/rep11/fichier1.sh 239 | rep1/rep11/fichier1.sh 239
rep2/rep11/rep22 4096 | rep1/rep11/tutu.sh 19
rep2/rep11/fichier.new.sh 6 <
Si j'arrivais à trouver une commande (ou un petit script) qui me donne quelque chose de beaucoup plus simple, genre :
rep1/fichier6.sh : taille 551
rep1/rep11/tutu.sh : n'existe pas sur mon serveur client
Si je ne tiens pas compte des chemins complet (avec un basename ) j'ai trouvé ceci :
awk 'NR==FNR {t[$0]++; next} !t[$0]' FILE2 FILE1
mais il faudrait que le chemin entier soir puis en compte….
… ce serait vraiment bien.
Un de vous a t-il une idée ?
Merci beaucoup.
# déjà-vu
Posté par NBaH . Évalué à 2.
qu'est-ce qui a changé par rapport à la discussion ouverte sur un autre forum il y a 4 jours, et à laquelle il semblait que la solution proposée à base de
rsync
avait reçue ton aval ?et, ici aussi, il faut mettre les retours terminal dans des balises CODE !
[^] # Re: déjà-vu
Posté par kevin066 . Évalué à 1.
Bonjour,
RSYNC parfait sur le même serveur, je dois voir si la fameuse commande qui marche bien peut-être lancée sur le serveur1 et comparer rep1 avec rep2 qui se trouve sur serveur2.
[kevin@server1 ~]$ rsync -r --size-only --dry-run --out-format='%f :%l :%i ' rep1/ server2:/home/kevin/rep2 > COMP.txt
Ensuite, j'ai pensé à une autre méthode : copier la 1ère arborescence de serveur1 (file1), idem sur serveur2 (file2) et copier file2 sur serveur 2 et comparer file1 et file2 afin de faire ressortir les éléments de file1 qui ne sont pas dans file2.
Je suis en plein apprentissage j'essaie de penser à plusieurs solutions ça sera bénéfique pour moi.
Tu en penses quoi ?
[^] # Re: déjà-vu
Posté par NBaH . Évalué à 1.
que tu devrais faire un effort et mettre les retours terminal dans des balises CODE.
[^] # Re: déjà-vu
Posté par kevin066 . Évalué à 0. Dernière modification le 16 août 2020 à 13:45.
Comment fait-on pour mettre les retour terminal ?
Toi qui a un super niveau en shell tu as une idée sur mon souci?
[^] # Re: déjà-vu
Posté par NBaH . Évalué à 1. Dernière modification le 16 août 2020 à 13:53.
il n'y a pas de souci, tu n'as qu'à essayer la commande.
quant aux balises CODE, ici, en bas de page, quand tu postes un message, il y a les indications (Aide‑mémoire sur la syntaxe Markdown) pour formater son message.
[^] # Re: déjà-vu
Posté par kevin066 . Évalué à 1.
Tu parles de RSYNC ? oui j'essaie demain. Ça va fonctionner ? Apparemment il faut rajouter l'instruction ssh dans la commande.
Sinon l'autre technique pour comparer deux fichiers, avec la commande awk voici le résultat de mes tests chez moi:
1°) Petit test concluant sur deux fichiers simples test1 et test2, je dois faire ressortir ce qu'il y dans test1 mais pas dans test2 (ou les différences) :
En si au lieu d'un nom de fichier il y a une arborescence voilà ce que cela donne :
Qu'en penses-tu ?
[^] # Re: déjà-vu
Posté par kevin066 . Évalué à -3.
Tu sèches ? je rigole.
[^] # Re: déjà-vu
Posté par NBaH . Évalué à 3.
plonk.
[^] # Re: déjà-vu
Posté par kevin066 . Évalué à -2. Dernière modification le 16 août 2020 à 15:12.
plonk ?
Que penses-tu de ma seconde solution, un avis d'expert est intéressant… Et puis ces forums sont destinés à cela……
[^] # Re: déjà-vu
Posté par _kaos_ . Évalué à 2. Dernière modification le 16 août 2020 à 23:20.
Salut,
Ce n'est pas juste la même question que posée ici il n'y a pas si longtemps ?
Bon, ok, le
perl
ou leR
on ne s'y met pas en 30 secondes. Enfin pas plus queawk
de toute façon.Matricule 23415
[^] # Re: déjà-vu
Posté par chimrod (site web personnel) . Évalué à 2.
Est-ce que
comm
ne répond pas à ton besoin ?[^] # Re: déjà-vu
Posté par elvis70 . Évalué à 1. Dernière modification le 17 août 2020 à 19:13.
Son script awk effectue déjà une jointure gauche sur le chemin d'accès. Il a juste besoin d'enlever les répertoires racines et, éventuellement, de distinguer les répertoires des fichiers.
Edit: ah non, il effectue une jointure gauche sur l'entièreté de la ligne ($0). Enfin.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.