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 :

Déplacer plusieurs fichiers de plusieurs sous dossiers dans un autre dossier


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Déplacer plusieurs fichiers de plusieurs sous dossiers dans un autre dossier
    Bonjour tout le monde.

    Je suis assez novice dans l'écriture de fichier bash. Et j'aurai besoin d'aide pour en faire un.

    J'ai besoin de déplacer tous les fichiers (xml par exemple) présents dans les sous-dossiers d'un dossier source vers un dossier cible contenant aucun sous-dossier.

    Exemple d'arborescence :

    /dossier_source
    /sous-dossier1
    fichier1.xml
    /sous-dossier2
    fichier2.xml
    /sous-dossierX
    fichierX.xml

    /dossier_destination
    fichier1.xml
    fichier2.xml
    fichier3.xml


    Pourriez vous m'expliquer le code à créer pour obtenir ce résultat svp.

    Merci d'avance.

    Cordialement

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Voici un bout de script (non testé) qui pourrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    REP_depart=...
    REP_dest=...
     
    cd $REP_depart
     
    for i in *
    do
    	if [ -d $i ]
    	then
    		mv $i/*.xml -t $REP_dest
    	fi
    done
    Après, il y a surement plus simple.

    Cordialement,
    Idriss

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Une autre approche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /dossier_source -type f -name "*.xml" -exec cp -v {} /dossier_destination \;
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    avec BASH 4 (si disponible) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (shopt -s globstar; mv -t /destination  /source/**/*.xml)
    attention, ceci est irréversible; alors essaie d'abord avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (shopt -s globstar; printf '%s\n' /source/**/*.xml)
    ...
    ?

    les parenthèses servent à ne pas modifer les options du shell courant.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Futur Membre du Club
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Re bonjour,

    merci pour vos réponses.

    avec le find j'ai réussi à faire un script que fonctionne comme je le voulais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/bin/bash
     
    find /repertoire_source -type f -name "*.xml" -exec sh -c '
    mv $1 /repertoire_destination
    ' _ {} \;
    Que pensez vous de la syntaxe ?

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Re-

    Ben je ne vois pas l'utilité du "sh", surtout qu'il n'y a aucun traitement de plus d'effectué avec ce processus

    Tu prends la syntaxe donnée plus haut, tu change le "cp" par "mv" et roulez jeunesse
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Futur Membre du Club
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Bonjour tout le monde

    effectivement le code ci-dessous marche très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /dossier_source -type f -name "*.xml" -exec mv -v {} /dossier_destination \;

    Merci à tous pour votre aide.

  8. #8
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (shopt -s globstar; mv -t /destination  /source/**/*.xml)
    Super utile, merci


  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 26
    Points
    26
    Par défaut
    je cherche une explication supplémentaire sur la réponse de N_Bah
    (shopt -s globstar; mv -t /destination /source/**/*.xml)

    Pourquoi le double ** ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 26
    Points
    26
    Par défaut désolé je viens de trouver
    c'est lié à l'option globstar

    Enable extended directory and subdirectory matching with the special ** pattern.

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

Discussions similaires

  1. déplacer des fichiers de plusieurs sous-répertoires
    Par PhilLU dans le forum Débuter
    Réponses: 3
    Dernier message: 13/06/2015, 15h27
  2. Réponses: 2
    Dernier message: 27/03/2014, 16h38
  3. Envoyer fichiers vieux d'un mois dans un autre dossier
    Par superseb9 dans le forum VBScript
    Réponses: 4
    Dernier message: 05/09/2012, 20h32
  4. inclure un fichier .bib qui se trouve dans un autre dossier
    Par nunuss35 dans le forum Bibliographies - Index - Glossaires
    Réponses: 4
    Dernier message: 26/01/2010, 21h00
  5. Plusieurs fichiers physiques pour un seul dans l'analyse
    Par Gaetch dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 18/09/2008, 02h33

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