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 des fichiers/répertoires


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 22
    Points
    22
    Par défaut Déplacer des fichiers/répertoires
    Bonjour,

    voici mon problème, j'ai plusieurs répertoires contenant x sous-répertoires et fichiers.

    A
    --- sous rep
    --- fichier
    B
    --- sous rep
    C
    --- fichier
    --- fichier

    Je dois créer dans chacun des répertoires principaux (A, B, C ici) un sous répertoire "old" et y mettre tous les fichiers (fichiers+répertoires) contenus par le répertoire courant.

    Au final, avoir ça:

    A
    --- old
    ------ sous rep
    ------ fichier
    B
    --- old
    ------ sous rep
    C
    --- old
    ------ fichier
    ------ fichier

    J'ai bien trouvé ce fil mais je n'arrive pas à le reprendre pour faire ce que je veux.

    merci d'avance!

    A+

  2. #2
    Expert éminent sénior 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 : 47
    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
    Points : 12 264
    Points
    12 264
    Par défaut
    une boucle sur les répertoires primaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in A B C ; do mkdir ${i}/old && mv ${i}/* ${i}/old/ 2> /dev/null  ; done
    code corrigé

    ce qui donne concrétement :


    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
    $ rm /tmp/*4
    $ cd /tmp #endroit ideal pour ce genre de demo
    $ mkdir {A,B,C}
    $  touch A/fichier B/fichier C/fichier2 C/fichier1 C/fichier # pour avoir de quoi tester
    $ for i in A B C ; do mkdir ${i}/old && mv ${i}/* ${i}/old/ 2> /dev/null ; done
    $ ls -lrtR [A-C] # pour voir le resultat
    A:
    total 4
    drwxr-xr-x  2 francois  wheel  512 Jan 10 19:56 old
     
    A/old:
    total 0
    -rw-r--r--  1 francois  wheel  0 Jan 10 19:55 fichier
     
    C:
    total 4
    drwxr-xr-x  2 francois  wheel  512 Jan 10 19:56 old
     
    C/old:
    total 0
    -rw-r--r--  1 francois  wheel  0 Jan 10 19:54 fichier
    -rw-r--r--  1 francois  wheel  0 Jan 10 19:55 fichier2
    -rw-r--r--  1 francois  wheel  0 Jan 10 19:55 fichier1
     
    B:
    total 4
    drwxr-xr-x  2 francois  wheel  512 Jan 10 19:56 old
     
    B/old:
    total 0
    -rw-r--r--  1 francois  wheel  0 Jan 10 19:55 fichier
    $ rm -rf [A-C] # pas oublier de purger le test...
    $

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frp31 Voir le message
    une boucle sur les répertoires primaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in A B C ; do mkdir ${i}/old ;&& mv ${i}/* ${i}/old/ 2> /dev/null  ; done
    Bonjour
    Attention au 2>/dev/null. Il me fait l'effet d'un cast en C pour éviter les warnings.
    Pour moi, le 2>/dev/null ne doit se mettre que lorsque l'on sait qu'on va avoir une erreur mais que l'on sait qu'on ne veut pas la voir à l'écran parce que, par exemple, on gère l'erreur nous-même.
    Exemple: équivalent d'un test -e dans un shell qui ne le connait pas (style /bin/sh)
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -d $1 1>/dev/null 2>/dev/null && echo "$1 existe" || echo "$1 n'existe pas"

    Ici, rediriger les erreurs du mv dans /dev/null empêchera l'utilisateur de détecter et gérer les pb éventuels tandis que les pb ne seront pas gérés par le code. Bref même s'il y a un soucis il ne le voit pas et croit que tout est ok...

    Et sinon il y a une erreur car on ne peut pas coupler un ";" avec "&&" (qui était d'ailleurs bien pensé car si on ne peut pas créer de dossier "old", autant ne pas tenter de copier).

    Donc je pense que ce code est plus indiqué
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in A B C ; do mkdir ${i}/old && mv ${i}/* ${i}/old ; done
    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]

  4. #4
    Expert éminent sénior 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 : 47
    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
    Points : 12 264
    Points
    12 264
    Par défaut
    bien complété merci

    et oui le ";&&" est bien sur une faut de frappe quand j'ai rédigé la réponse avant de me décider à le démontrer

  5. #5
    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
    si le dossier old existe déjà (mkdir retourne un code d'erreur), mais il faut quand même y copier les fichiers.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    si le dossier old existe déjà (mkdir retourne un code d'erreur), mais il faut quand même y copier les fichiers.
    Bien vu
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in A B C ; do ( test -d $i/old || mkdir $i/old ) && mv $i/* $i/old ; done

    S'il te plait, ne vient pas dire maintenant
    oui mais si old existe sans être un répertoire
    parce que pfff...
    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]

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Salut,

    Non il n'y aura pas de old ^^

    merci c'est parfait!

  8. #8
    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,

    Citation Envoyé par Sve@r Voir le message
    Bien vu
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in A B C ; do ( test -d $i/old || mkdir $i/old ) && mv $i/* $i/old ; done

    S'il te plait, ne vient pas dire maintenant parce que pfff...
    Il suffit de rajouter l'option -p à la commande mkdir et le tour est joué, pas besoin de tests supplémentaires

    -p, --parents
    créer des répertoires parent (répertoires intermédiaires) si nécessaire, sans
    générer d'erreur s'ils existent
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

Discussions similaires

  1. déplacer des fichiers sans les répertoires
    Par ravaza dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 14/11/2011, 18h13
  2. Réponses: 2
    Dernier message: 21/04/2011, 17h15
  3. [AC-2007] déplacer des fichiers txt dans un autre répertoire
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/01/2010, 10h40
  4. [Débutant] Déplacer des fichiers dans un répertoire
    Par nekcorp dans le forum Fortran
    Réponses: 5
    Dernier message: 10/10/2008, 18h59
  5. Réponses: 3
    Dernier message: 12/04/2006, 20h44

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