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

  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
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ça veut dire quoi "le plus modifié" ?

  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
    Invité
    Invité(e)
    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 ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    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 ! )

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

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    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 430
    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.

  8. #8
    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
    Le tableau pas forcement c juste une piste que j' explore

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

    Déjà, pourquoi faire des md5sum des fichiers ?

    Une simple vérification de la date de modification des fichier par rapport à une date de référence n'est pas suffisant (find fait ça très bien) ?

  10. #10
    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
    Je sais mais mon formateur est parano.
    C si jamais un pirate arrive a remettre la date et l heure du fichier comme avant

  11. #11
    Invité
    Invité(e)
    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)).

  12. #12
    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
    Je pense qu' il y a pas d' intérêt, c juste pour nous faire faire un script.

  13. #13
    Invité
    Invité(e)
    Par défaut
    algorithmiquement, je simplifierais :
    Code PSEUDO-CODE : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pour arg dans argumentsScript
            find "$arg" -fprintf /tmp/"$arg".trace '%A@ %T@ %p\n' #ce n'est qu'un exemple.
            si existe "$arg".trace
            alors
                    nbModif = getNbModif( compare( "$arg".trace , /tmp/"$arg".trace ) )
                    test $grstNbModif||0 -lt $nbModif && grstNbModif = $nbModif
            finSi
    finPour
    il y a bien sûr d'autres choses à vérifier, mais le gros du fonctionnement du script est là, il me semble.

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