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 :

Identifier le répertoire le plus modifié


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai Avatar de krouk
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Par défaut Identifier le répertoire le plus modifié
    Bonjour,

    Je suis en formation est on me demande d' écrire un script pour voir si un répertoire à était modifier depuis le premier lancement du script.
    Je dois pouvoir tester plusieurs répertoire en une seule fois.
    Sa sa va je m en sort.
    Mon soucis est quand cas de modification d' un ou plusieurs répertoire je ne dois avoir qu une seul message m' indiquant le répertoire le plus modifié, et je ne sais pas comment faire.
    Voila ou j en suis



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #!/bin/bash
     
    mkdir /home/user/testscript/testetc 2>/dev/null
    mkdir /home/user/testscript/testetc/arch 2>/dev/null
    mkdir /home/user/testscript/testetc/diff 2>/dev/null
    mkdir /home/user/testscript/testetc/carac 2>/dev/null
    #-----------------------------------------------------------------------------------------------------------------------
    while [ -n "$1" ]; do 
     
        if [ -e /home/user/testscript/testetc/arch/$1-arch.md5 ];
     
    then
        touch /home/user/testscript/testetc/$1-new.md5
        find /$1 -type f -print0 | xargs -0 md5sum  >> /home/user/testscript/testetc/$1-new.md5
        resultat=$(diff --normal /home/user/testscript/testetc/$1-new.md5 /home/user/testscript/testetc/arch/$1-arch.md5)
     
        touch /home/user/testscript/testetc/diff/$1-diff.md5
        echo $resultat >>  /home/user/testscript/testetc/diff/$1-diff.md5     
        touch /home/user/testscript/testetc/carac/$1-carac.md5
        carac=$(wc -w /home/user/testscript/testetc/diff/$1-diff.md5) 
        echo "${carac/home%.*}" |  cut -d / -f 1 >> /home/user/testscript/testetc/carac/$1-carac.md5
       nombre=$(cut -d / -f 1 /home/user/testscript/testetc/carac/$1-carac.md5)
         declare -a tableau_indi=( "$1" "$nombre" )
         echo ${tableau_indi[@]}
     
     
        else
            touch /home/user/testscript/testetc/arch/$1-arch.md5
            find /$1 -type f -print0 | xargs -0 md5sum >> /home/user/testscript/testetc/arch/$1-arch.md5
            echo "1ere fois: Fichier $1-arch créé"
     
            fi
     
        shift
        done

    Merci d avance pour le coup de main

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    ça veut dire quoi "le plus modifié" ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai Avatar de krouk
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Par défaut
    N_BaH le plus modifié si j' ai bien compris, c'est le répertoire qui a le plus de fichiers modifiés.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    d'abord, syntaxiquement, sans être des erreurs, il y a de nombreuses maladresses (c'est normal)
    pour parcourir la liste ds arguments passés à un script, on utilise une boucle for.
    touch ne sert à rien. les fichiers, s s'ils n'existent pas, seront créés lors de la redirection.
    il faut toujours mettre les développements de variables entre guillemets.
    find se passe très bien de xargs, grâce à son option -exec.

    ensuite, algorithmiquement... une fois que j'ai essuyé le sang qui coule de mes yeux, je ne vois plus rien.
    tu veux bien nous expliquer le fonctionnement de ton script, et ce que tu veux y ajouter ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre à l'essai Avatar de krouk
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Par défaut
    Désoler pour tes yeux c mon tout premier script

    Quand je lance mon script je tape depuis le terminal ./test suivi des répertoire que je veux tester " etc, var, ..."

    Bon le début il me cré des dossiers.

    Ensuite j utilise la boucle "While" pour lui dire de s exécuter tant qu' il y a des répertoires a tester.
    Puis avec le if je lui demande de trouver que j' ai appeler $1-arch.md5
    si il ne le trouve pas alors il le cré puis m' affiche le message "1ere fois: Fichier $1-arch créé"
    et fin
    Si il le trouve alors il cré le fichier $1-diff.md5
    puis fais la différence avec le $1-arch.md5
    C est la partie que je pense être correct

    Après pour avoir qu un seul message m' indiquant le rep qui a été le plus modifier.
    Je penser prendre le résultat de la commande diff en mettant les lignes qui sont différentes dans un fichier $1-diff.
    Je voulais ensuite utiliser la commande wc -w pour compter le nombre de mot des differents fichier -diff et prendre celui qui a la plus grande "valeur" pour afficher un message avec le rep le plus "modifier"


    Désoler je sais pas si j' ai bien expliquer.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 359
    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 359
    Par défaut
    Bonjour,

    Si j'ai bien compris le principe de ton script, tu as la réponse dans ton tableau, non ?

    La seule chose à faire c'est d'extraire la plus grande valeur (enfin, je suppose)...

    Donc, une boucle sur les éléments du tableau et qui retourne la plus grande valeur.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    deux petites choses me tracassent :
    • quel intérêt de relever les modifications du système de fichier, à chaque fois, depuis la première exécution du script ?
    • les modifications des droits sur les fichiers sont-elles considérées comme ds modifications devant être signalées ? alors, md5sum ne va pas les refléter.
      par contre, find ... -fprintf peut rediriger, dans un fichier (pas besoin de redirection shell), les noms et les différentes dates pouvant être modifiées (entre autres choses) des fichiers (accès, création, modification, changement (seules les trois dernières étant pertinentes)).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    • Sais-tu que touch ne fait que modifier l'horodatage du fichier ?
      Si on veut un nouveau fichier vierge, on peut faire ceci :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      > mon_nouveau_fichier.txt
      Attention à l'écrasement !
      Dans ton cas, les fichiers "touch"és vont exploser en taille car jamais remis à zéro.
      .
    • Imaginons que ta vieille liste de fichiers s'appelle avant.txt et la dernière liste s'appelle apres.txt.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      nombre_differences=$( awk '(FNR==NR){md=$1;$1="";tab[$0]=md;vu++;next;} {md=$1;$1="";if (tab[$0]!="") vu--; if (tab[$0]!=md) {nb++;}} END{print nb+vu;}' avant.txt apres.txt )
      Il faut ajouter les fichiers ajoutés ou modifiés (md5 différents) et les fichiers disparus. (3 catégories ! )

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2007, 16h06
  2. Répertoire par défault à modifier après lancement
    Par Mattetfamilly dans le forum C++Builder
    Réponses: 11
    Dernier message: 08/03/2007, 18h37
  3. Spool & Formatage sortie SQL*Plus modifié
    Par Melvine dans le forum Sql*Plus
    Réponses: 7
    Dernier message: 18/05/2006, 13h51
  4. Je ne peux plus modifier ma bdd
    Par tinwul dans le forum Access
    Réponses: 4
    Dernier message: 02/05/2006, 11h32
  5. Comment identifier le répertoire courant
    Par Xavier dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/09/2005, 18h39

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