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

RedHat / CentOS / Fedora Discussion :

CentOS 5 : find et mv (Partie 2)


Sujet :

RedHat / CentOS / Fedora

  1. #1
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    Par défaut CentOS 5 : find et mv (Partie 2)
    Bonjour,

    Ma question fait suite à cette discussion :
    http://www.developpez.net/forums/d11...ntos5-find-mv/

    Voila j'ai une question qui a mon avis doit être simple mais je vois pas....

    lors de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /archive/ -depth -type d -name "DossierB" -exec bash -c 'mv -v "${1}" "${1%/*}"/DOSSIERC' _ {} \;
    il va me renommer le dossier et ça c'est ok ça me va, mais aujourd'hui je suis dans ce cas là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Archive/Dossier1/DossierA/FICHIER1
    Archive/Dossier1/DossierA/FICHIER2
    Archive/Dossier1/DossierA/FICHIER3
    Archive/Dossier1/DossierB/FICHIERA
    Archive/Dossier1/DossierB/FICHIERB
    Archive/Dossier1/DossierB/FICHIERC
     
    Archive/Dossier2/DossierA/FICHIER1
    Archive/Dossier2/DossierA/FICHIER2
    Archive/Dossier2/DossierA/FICHIER3
    Archive/Dossier2/DossierB/FICHIERA
    Archive/Dossier2/DossierB/FICHIERB
    Archive/Dossier2/DossierB/FICHIERC
    Mon but est donc de faire en sorte que les FICHIERA, FICHIERB,etc... se retrouvent dans /DOSSIERA/ à la suite des fichiers 1,2,3 etc....

    Là encore j'ai 144 dossiers en erreur et 8 fichiers par dossier en erreur XD donc bon pas envi de faire ça à la main

    Pour info j'ai essayé avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /Archive/ -depth -type d -name "DOSSIERB" -exec bash -c 'cp "${1}" "${1%/*}"/DOSSIERA' _ {} \;
    J'ai une erreur cp: omission du répertoire

    Je vois pas trop comment faire sur ce coup là pour arriver à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Archive/Dossier1/DossierA/FICHIER1
    Archive/Dossier1/DossierA/FICHIER2
    Archive/Dossier1/DossierA/FICHIER3
    Archive/Dossier1/DossierA/FICHIERA
    Archive/Dossier1/DossierA/FICHIERB
    Archive/Dossier1/DossierA/FICHIERC
    Archive/Dossier1/DossierB/
    Voir que le DossierB soir supprimer car il doit être vide ensuite donc en 1 ou 2 commandes ^^


    Merci de l'aide si quelqu'un à une solution pour moi

    Edit : pour mon omission du répertoire c'est logique oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'cp -r "${1}" "${1%/*}"/DOSSIERA' _ {} \;
    c'est mieux mais du coup il me déplace tout le dossierB dans mon dossier A et moi je veux que le contenu

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

    $ tree Archive/
    Archive/
    ├── Dossier1
    │** ├── DossierA
    │** │** ├── FICHIER1
    │** │** ├── FICHIER2
    │** │** └── FICHIER3
    │** └── DossierB
    │** ├── FICHIERA
    │** ├── FICHIERB
    │** └── FICHIERC
    └── Dossier2
    ├── DossierA
    │** ├── FICHIER1
    │** ├── FICHIER2
    │** └── FICHIER3
    └── DossierB
    ├── FICHIERA
    ├── FICHIERB
    └── FICHIERC

    6 directories, 12 files

    $ find Archive \( -name "DossierA" -prune \) -o \( -type f \) -exec bash -c 'DEST="${1%/*}"; mv -v "${1}" "${DEST%/*}/DossierA/"' _ {} \;
    «*Archive/Dossier2/DossierB/FICHIERC*» -> «*Archive/Dossier2/DossierA/FICHIERC*»
    «*Archive/Dossier2/DossierB/FICHIERB*» -> «*Archive/Dossier2/DossierA/FICHIERB*»
    «*Archive/Dossier2/DossierB/FICHIERA*» -> «*Archive/Dossier2/DossierA/FICHIERA*»
    «*Archive/Dossier1/DossierB/FICHIERC*» -> «*Archive/Dossier1/DossierA/FICHIERC*»
    «*Archive/Dossier1/DossierB/FICHIERB*» -> «*Archive/Dossier1/DossierA/FICHIERB*»
    «*Archive/Dossier1/DossierB/FICHIERA*» -> «*Archive/Dossier1/DossierA/FICHIERA*»

    $ tree Archive/
    Archive/
    ├── Dossier1
    │** ├── DossierA
    │** │** ├── FICHIER1
    │** │** ├── FICHIER2
    │** │** ├── FICHIER3
    │** │** ├── FICHIERA
    │** │** ├── FICHIERB
    │** │** └── FICHIERC
    │** └── DossierB
    └── Dossier2
    ├── DossierA
    │** ├── FICHIER1
    │** ├── FICHIER2
    │** ├── FICHIER3
    │** ├── FICHIERA
    │** ├── FICHIERB
    │** └── FICHIERC
    └── DossierB

    6 directories, 12 files

    $
    Je te laisse supprimer les dossiers vides

    PS. J'ai mis le tout entre balises "quote" et non "code" pour cause de caractères exotiques dans la sortie de la commande "tree" qui ne passent pas dans le code Ce n'est pas typique à ce forum, le problème semble venir de la commande "tree" elle même. Je n'avais pas ce problème avant

  3. #3
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    Par défaut
    Tout d'abord MERCI !

    Par contre dans ta commande j'ai un hic >_<

    Je viens de la tester sur une base de test (elle est en vrac maintenant).

    A la base j'ai ça :
    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
     
    Archive/DOSSIERA/dossier1/fichier1
    Archive/DOSSIERA/dossier1/fichier2
    Archive/DOSSIERA/dossier1/fichier3
    Archive/DOSSIERA/dossier2/fichierA
    Archive/DOSSIERA/dossier2/fichierB
    Archive/DOSSIERA/dossier3/fichierX
    Archive/DOSSIERA/dossier3/fichierY
    Archive/DOSSIERA/dossier3/fichierZ
     
    Archive/DOSSIERB/dossier1/fichier1
    Archive/DOSSIERB/dossier1/fichier2
    Archive/DOSSIERB/dossier1/fichier3
    Archive/DOSSIERB/dossier2/fichierA
    Archive/DOSSIERB/dossier2/fichierB
    Archive/DOSSIERB/dossier3/fichierX
    Archive/DOSSIERB/dossier3/fichierY
    Archive/DOSSIERB/dossier3/fichierZ
    Donc quand j'utilise ton code :
    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
     
    Archive/DOSSIERA/dossier1/fichier1
    Archive/DOSSIERA/dossier1/fichier2
    Archive/DOSSIERA/dossier1/fichier3
    Archive/DOSSIERA/dossier1/fichierA
    Archive/DOSSIERA/dossier1/fichierB
    Archive/DOSSIERA/dossier1/fichierX
    Archive/DOSSIERA/dossier1/fichierY
    Archive/DOSSIERA/dossier1/fichierZ
    Archive/DOSSIERA/dossier2/
    Archive/DOSSIERA/dossier3/
     
    Archive/DOSSIERB/dossier1/fichier1
    Archive/DOSSIERB/dossier1/fichier2
    Archive/DOSSIERB/dossier1/fichier3
    Archive/DOSSIERB/dossier1/fichierA
    Archive/DOSSIERB/dossier1/fichierB
    Archive/DOSSIERB/dossier1/fichierX
    Archive/DOSSIERB/dossier1/fichierY
    Archive/DOSSIERB/dossier1/fichierZ
    Archive/DOSSIERB/dossier2/
    Archive/DOSSIERB/dossier3/
    Enfaite la il me regoupe tous les fichiers des differents sous dossier dans le dossier que l'on saisie dans ta commande, ce qui est super mais qui ne correspond pas à ma demande mais merci de te décarcasser XD

    Enfaite j'aimerais arriver à ça :
    Archive/DOSSIERA/dossier1/fichier1
    Archive/DOSSIERA/dossier1/fichier2
    Archive/DOSSIERA/dossier1/fichier3
    Archive/DOSSIERA/dossier1/fichierA
    Archive/DOSSIERA/dossier1/fichierB
    Archive/DOSSIERA/dossier2/
    Archive/DOSSIERA/dossier3/fichierX
    Archive/DOSSIERA/dossier3/fichierY
    Archive/DOSSIERA/dossier3/fichierZ

    Pour qu'il me copie uniquement les fichiers d'un dossier dans un autre
    Ici du dossier2 au dossier1 mais dans tout les dossierA B C etc....


    Ps: je recharge ma base test XD

  4. #4
    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
    ce qui est super mais qui ne correspond pas à ma demande
    Si ! Ça correspondait à ta 1ère demande et à ton exemple, ce n'est pas de ma faute si ton exemple n'était pas complet


    $ tree Archive/
    Archive/
    ├── DOSSIERA
    │** ├── dossier1
    │** │** ├── fichier1
    │** │** ├── fichier2
    │** │** └── fichier3
    │** ├── dossier2
    │** │** ├── fichierA
    │** │** └── fichierB
    │** └── dossier3
    │** ├── fichierX
    │** ├── fichierY
    │** └── fichierZ
    └── DOSSIERB
    ├── dossier1
    │** ├── fichier1
    │** ├── fichier2
    │** └── fichier3
    ├── dossier2
    │** ├── fichierA
    │** └── fichierB
    └── dossier3
    ├── fichierX
    ├── fichierY
    └── fichierZ

    8 directories, 16 files

    $ find Archive \( -name "DOSSIERA" -prune \) -o \( -type f \) -exec bash -c 'DEST="${1%%/*}"; REP="${1%/*}"; mv -v "${1}" "${DEST%/*}/DOSSIERA/${REP##*/}/"' _ {} \;
    «*Archive/DOSSIERB/dossier3/fichierZ*» -> «*Archive/DOSSIERA/dossier3/fichierZ*»
    «*Archive/DOSSIERB/dossier3/fichierY*» -> «*Archive/DOSSIERA/dossier3/fichierY*»
    «*Archive/DOSSIERB/dossier3/fichierX*» -> «*Archive/DOSSIERA/dossier3/fichierX*»
    «*Archive/DOSSIERB/dossier2/fichierB*» -> «*Archive/DOSSIERA/dossier2/fichierB*»
    «*Archive/DOSSIERB/dossier2/fichierA*» -> «*Archive/DOSSIERA/dossier2/fichierA*»
    «*Archive/DOSSIERB/dossier1/fichier3*» -> «*Archive/DOSSIERA/dossier1/fichier3*»
    «*Archive/DOSSIERB/dossier1/fichier2*» -> «*Archive/DOSSIERA/dossier1/fichier2*»
    «*Archive/DOSSIERB/dossier1/fichier1*» -> «*Archive/DOSSIERA/dossier1/fichier1*»

    $ tree Archive/
    Archive/
    ├── DOSSIERA
    │** ├── dossier1
    │** │** ├── fichier1
    │** │** ├── fichier2
    │** │** └── fichier3
    │** ├── dossier2
    │** │** ├── fichierA
    │** │** └── fichierB
    │** └── dossier3
    │** ├── fichierX
    │** ├── fichierY
    │** └── fichierZ
    └── DOSSIERB
    ├── dossier1
    ├── dossier2
    └── dossier3

    8 directories, 8 files

    $
    Et si ce n'est pas exactement ce que tu veux, le principe tu l'as, il ne te reste plus qu'à adapter.

  5. #5
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    Par défaut
    Désolé si je me suis mal exprimé je voulais pas te froisser, j’apprécie réellement ton aide et ce n'était pas pour critiquer, loin de là mon idée....

    Pour ce qui est de ta commande je regarde d'ici une petite heure.
    J'ai fait des répliques de mes dossiers en test afin de trifouiller un peu au cas ou.

    Je te tiens au courant dès que possible...

  6. #6
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    Par défaut
    Bonsoir,

    Alors je viens de faire un test sur une petite partie de fichier avec cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find Archive/ -depth -name "dossier3" -exec bash -c 'mv -vi "${1}"/* "${1%/*}/dossier2/"' _ {} \;
    Je ferais un test complet demain après le passage des batchs de la nuit voir si cela fonctionne vraiment....

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

Discussions similaires

  1. [TSplitter] 3 parties...
    Par agh dans le forum Delphi
    Réponses: 3
    Dernier message: 07/09/2006, 14h11
  2. [VBA-E] Find et une partie d'une Date
    Par Coplan dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/07/2006, 15h58
  3. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 15h38
  4. selectionner une partie d'un TImage
    Par bidochon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/02/2003, 20h08
  5. Réponses: 3
    Dernier message: 09/02/2003, 02h09

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