IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comparaison de 2 fichiers ou arborescence


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut Comparaison de 2 fichiers ou arborescence
    Bonjour,

    Je souhaiterais comparer 2 fichiers qui peuvent éventuellement contenir des sous-répertoires.

    Pour cela je liste dans un fichier (via un script) tous les chemins absolus avec la taille du fichier final en colonne 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SERVER1:kevin:/home/kevin>tree -s rep1
    rep1
    |-- [       4096]  rep11
    |   |-- [        104]  brian
    |   |-- [         26]  dady
    |   `-- [         90]  jon
    |-- [       4096]  rep12
    |   `-- [         26]  papa
    |-- [         10]  tata
    `-- [         19]  tutu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SERVER1:kevin:/home/kevin>ls rep1
    rep11  rep12  tata  tutu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SERVER1:kevin:/home/kevin>tree -s rep2_ref
    rep2_ref
    |-- [       4096]  rep21
    |   `-- [       4096]  rep211
    |       |-- [         63]  monica
    |       `-- [         75]  santa
    |-- [       4096]  rep22
    |   |-- [         50]  file22_1
    |   `-- [         15]  file22_2
    |-- [       4096]  rep23
    |-- [         10]  tata
    `-- [         10]  titi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SERVER1:kevin:/home/kevin>ls rep2_ref/
    rep21  rep22  rep23  tata  titi
    Dans mes 2 fichiers plats obtenus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SERVER1:kevin:/home/kevin>cat LISTE_rep1
    /home/kevin/rep1/tata 10
    /home/kevin/rep1/tutu 19
    /home/kevin/rep1/rep12/papa 26
    /home/kevin/rep1/rep11/jon 90
    /home/kevin/rep1/rep11/dady 26
    /home/kevin/rep1/rep11/brian 104
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SERVER1:kevin:/home/kevin>cat  LISTE_rep2_ref
    /home/kevin/rep2_ref/rep22/file22_2 15
    /home/kevin/rep2_ref/rep22/file22_1 50
    /home/kevin/rep2_ref/tata 10
    /home/kevin/rep2_ref/rep21/rep211/santa 75
    /home/kevin/rep2_ref/rep21/rep211/monica 63
    /home/kevin/rep2_ref/titi 10
    Jusque là tout va bien.


    Seconde étape :

    Si me fixe rep2_ref comme référence, je voudrais faire ressortir dans un fichier "difference_file.txt" tout ce qui est dans rep2_ref mais pas dans rep1 :

    Pour cela j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'NR==FNR {t[$0]++; next} !t[$0]' /home/kevin/LISTE_rep1 /home/kevin/LISTE_rep2_ref > /home/kevin/difference_file.txt
    Résultat dans le fichier difference_file.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /home/kevin/rep2_ref/rep22/file22_2 15
    /home/kevin/rep2_ref/rep22/file22_1 50
    /home/kevin/rep2_ref/tata 10
    /home/kevin/rep2_ref/rep21/rep211/santa 75
    /home/kevin/rep2_ref/rep21/rep211/monica 63
    /home/kevin/rep2_ref/titi 10
    A première vue je ne comprends pas pourquoi on trouve le fichier tata dans le résultat difference_file.txt alors qu'il se trouve dans les 2 dossiers et qu'il a la même taille. Il ne devrait pas ressortir.
    En revanche le fichier tutu est dans rep1 mais ne ressort pas dans difference_file.txt et cela me va bien car il ne figure pas dans rep2_ref.

    Je rame là-dessus depuis des heures, impossible de trouver pourquoi je retrouve tata alors qu'il n'a rien à faire dans difference_file.txt .

    C'est peut-être le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'NR==FNR {t[$0]++; next} !t[$0]'
    qui comporte quelque chose qui ne va pas……………………………. je ne vois pas du tout.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 424
    Par défaut
    ..../rep2_ref/tata != .../rep1/tata

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Oups bien sûr merci !!!
    Le code awk que j’utilise te semble t-il correct ?

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 424
    Par défaut
    Oui, mais si tu veux rechercher des doublons de fichier, à ta place je passerais par un md5sum de chaque fichier et rechercherais les doublons de la checksum.

    Comme ça, même si le nom de fichier est différent, on retrouve le doublon (aux très très rare collisions près).

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    La recherche s'effectue sur le nom du fichier associé à sa taille, ou à l'unique présence d 'un fichier dans rep2_ref et pas dans rep1.

    J'ai tenté une autre méthode avec rsync :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsync -r --size-only --dry-run --out-format='%f :%l :%i ' rep2_ref/ rep1
    mais curieusement cela ne donne pas exactement le même résultat qu'avec le awk.

    Il semblerait que le rsync ne m'a pas trouvé des différences au niveau de la taille alors que cela doit remonter dans les différences.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 738
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    diff n'est toujours pas une option ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Avec des sous dossiers à ne plus en finir ... j’ai choisi une autre option .
    Le awk est pas mal ... mais le rsync devrait fonctionner

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de deux fichiers EXCEL
    Par meufeu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/10/2006, 23h56
  2. comparaison de deux fichiers textes
    Par chmaichel dans le forum Delphi
    Réponses: 1
    Dernier message: 28/07/2006, 12h35
  3. [VBA-E]comparaison de 2 fichiers Excel
    Par frederic.go dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2006, 15h22
  4. [langage] Comparaison de deux fichiers
    Par perlgirl dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 17h05
  5. [Info]comparaison de 2 fichiers
    Par menuge dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/04/2005, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo