Précédent   Forum des professionnels en informatique > Systèmes > Linux > Distributions > Fedora / Red hat
Fedora / Red hat Vos questions sur les distributions Fedora / Red Hat
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 11h07   #1
Membre habitué
 
Expert Support Applicatif
Inscription : mars 2007
Messages : 158
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Expert Support Applicatif
Secteur : Distribution

Informations forums :
Inscription : mars 2007
Messages : 158
Points : 140
Points : 140
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 :
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 :
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 :
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 :
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 :
'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
Alex70 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 13h13   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
$ 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
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 22/12/2011, 14h11   #3
Membre habitué
 
Expert Support Applicatif
Inscription : mars 2007
Messages : 158
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Expert Support Applicatif
Secteur : Distribution

Informations forums :
Inscription : mars 2007
Messages : 158
Points : 140
Points : 140
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 :
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 :
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
Alex70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 14h43   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
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


Citation:
$ 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.
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 22/12/2011, 15h11   #5
Membre habitué
 
Expert Support Applicatif
Inscription : mars 2007
Messages : 158
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Expert Support Applicatif
Secteur : Distribution

Informations forums :
Inscription : mars 2007
Messages : 158
Points : 140
Points : 140
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...
Alex70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 17h31   #6
Membre habitué
 
Expert Support Applicatif
Inscription : mars 2007
Messages : 158
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Expert Support Applicatif
Secteur : Distribution

Informations forums :
Inscription : mars 2007
Messages : 158
Points : 140
Points : 140
Bonsoir,

Alors je viens de faire un test sur une petite partie de fichier avec cette commande :
Code :
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....
Alex70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h42.


 
 
 
 
Partenaires

Hébergement Web