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 :

Script pour automatiser des taches sur des répertoires


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut Script pour automatiser des taches sur des répertoires
    Bonjour à tous !

    Je souhaite réaliser une action répétée dans tout un tas de répertoires, et je suis quasiment persuadé que le plus simple serait d'utiliser un script. Le problème est que je n'ai aucune expérience dans ce domaine, c'est pourquoi je me tourne vers vous!

    Je vous décris ma problématique, j'ai donc un répertoire de base, dans lequel j'ai plus de 500 répertoires. La constante est que la structure de ces répertoires est la même enfin quasiment, pour tous, il y a plusieurs fichiers dedans, et entre 0 et 3 sous répertoires.

    Je voudrais pour chacun de ces répertoires, exécuter les actions suivantes :

    Créer un répertoire "MyFolder"
    1) Si le répertoire "YourFolder" n'existe pas, il faut le créer
    2) Si le répertoire "HisFolder" n'existe pas, il faut le créer
    3) Déplacer les fichiers ".jpg" et ".gif" dans le répertoire précédemment créer donc "MyFolder".
    4) Vérifier qu'il n'y a plus qu'un seul et unique fichier dans ce répertoire, de type ".psd", (ignorer les sous-répertoires), et s’il y en a plus d'un seul, dans ce cas, il faut stocker le chemin de ce répertoire dans un fichier a la racine de tous les répertoires.

    Je ne sais pas si j'ai été clair, mais si ce n'est pas le cas, je vous prie de bien vouloir m'en excuser, dites-moi ce qui vous semble abstrait et j'essaierai de mieux détailler ce que je souhaite.

    Merci à tous ceux qui prendront le temps de lire, et particulièrement à ceux qui essaieront de m'aider !

    Cordialement,
    Alex.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tu peux utiliser une boucle


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while read 
    do 
        mkdir $REPLY/myfolder
        [ ! -d $REPLY/yourfolder ] && mkdir $REPLY/yourfolder || echo $REPLY/myfoler existe déjà 
        #repond a la problematique n°1
        [ ! -d $REPLY/hisfolder ] && mkdir $REPLY/hisfolder || echo $REPLY/hisfoler existe déjà
        # repond a la problematique n°2
        mv *jpg *jpeg *gif $REPLY/myfolder
        #repond a la problematique n°3
        # le besoin 4 est facile je te laisse le chercher.
    done < $( find /racine_a_analyser/ -type d )
    tant que lire
    faire
    si non-existe-repertoire $REPLY/youfolder alors creer $REPLY/yourfolder sinon ecrire $REPLY/yourfolder existe déjà
    # pareil pour hisfolder
    fin_boucle <injection $(du resultat de la recherche des repertoires)

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut
    Bonjour Frp31 !

    Merci beaucoup pour ta réponse ! C'est très gentil de ta part ! Je vais essayer ça ce soir, je viens tout juste de rentrer chez moi après une semaine a l'étranger !

    Je reviens vers toi dés que j'ai eu la possibilité de tester ça !

    encore merci pour ton aide.

    Cordialement,
    Alex.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frp31 Voir le message
    tu peux utiliser une boucle


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while read 
    do 
        mkdir $REPLY/myfolder
        [ ! -d $REPLY/yourfolder ] && mkdir $REPLY/yourfolder || echo $REPLY/myfoler existe déjà 
        #repond a la problematique n°1
        [ ! -d $REPLY/hisfolder ] && mkdir $REPLY/hisfolder || echo $REPLY/hisfoler existe déjà
        # repond a la problematique n°2
        mv *jpg *jpeg *gif $REPLY/myfolder
        #repond a la problematique n°3
        # le besoin 4 est facile je te laisse le chercher.
    done < $( find /racine_a_analyser/ -type d )
    tant que lire
    faire
    si non-existe-repertoire $REPLY/youfolder alors creer $REPLY/yourfolder sinon ecrire $REPLY/yourfolder existe déjà
    # pareil pour hisfolder
    fin_boucle <injection $(du resultat de la recherche des repertoires)
    Salut

    Me semble que la phrase "déplacer les .jpg et .jpeg" dans le répertoire myFolder" sous-entend "depuis le répertoire en cours de traitement" donc je remplacerais la ligne en rouge par mv "$REPLY"/*jpg "$REPLY"/*jpeg "$REPLY"/*gif "$REPLY"/myfolder.

    Et je conseillerais aussi d'encadrer chaque $REPLY de guillemets (comme je l'ai écrit dans ma commande) au cas où un dossier traité contiendrait un espace dans son nom...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

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

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    mv --target-directory="$REPLY/myfolder" "$REPLY/"*.{jp{,e}g,gif}
    sinon mv ne va pas comprendre où déplacer les fichiers.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    absoluement ... bien vu ...

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ...[/code]sinon mv ne va pas comprendre où déplacer les fichiers.
    Ben si !!! Dans la syntaxe mv "$REPLY"/*jpg "$REPLY"/*jpeg "$REPLY"/*gif "$REPLY"/myfolder, le dernier argument de la ligne étant un dossier, mv déplacera les fichiers dans ledit dossier...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    Par défaut
    bon, tant mieux.
    c'est ce que j'avais en mémoire, soutenu par l'existence de cette option.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    tout d'abord, un grand merci à vous tous pour votre aide, je suis vraiment touché de voir qu'autant de gens prennent le temps d'aider !

    Je n'ai toujours pas eu le temps de faire l'essaie du script, ma fille a passé une très mauvaise semaine (bien malade) et du coup j'ai du prendre des jours pour m'en occuper.

    Je pense pouvoir essayer ça d'ici demain soir, je reviens vers vous, en tous cas, encore un très grand merci pour votre aide.

    Cordialement,
    Alex.

Discussions similaires

  1. [MLD] Base de données pour un site qui émet des avis sur des hotels
    Par Anandamine dans le forum Schéma
    Réponses: 0
    Dernier message: 24/06/2012, 05h03
  2. Réponses: 3
    Dernier message: 10/02/2012, 11h40
  3. Trigger pour mettre des droits sur des procedures et des vues
    Par briino dans le forum Développement
    Réponses: 3
    Dernier message: 23/09/2009, 09h44
  4. script pour automatiser upload fichier sur site https
    Par ludo_93 dans le forum VBScript
    Réponses: 0
    Dernier message: 03/10/2008, 10h24
  5. Réponses: 6
    Dernier message: 13/11/2007, 12h06

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