Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 21/04/2011, 14h27   #1
Invité régulier
 
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 5
Points : 5
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
rhesus est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/04/2011, 15h18   #2
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 979
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 979
Points : 6 064
Points : 6 064
Bonjour.

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

Code :
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/04/2011, 15h23   #3
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,

Une autre approche :

Code :
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.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 21/04/2011, 15h47   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

avec BASH 4 (si disponible) :
Code :
(shopt -s globstar; mv -t /destination  /source/**/*.xml)
attention, ceci est irréversible; alors essaie d'abord avec :
Code :
(shopt -s globstar; printf '%s\n' /source/**/*.xml)
...
?

les parenthèses servent à ne pas modifer les options du shell courant.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 21/04/2011, 17h01   #5
Invité régulier
 
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 5
Points : 5
Re bonjour,

merci pour vos réponses.

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

Code :
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 ?
rhesus est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/04/2011, 17h50   #6
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
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.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 30
Vieux 22/04/2011, 12h15   #7
Invité régulier
 
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 5
Points : 5
Bonjour tout le monde

effectivement le code ci-dessous marche très bien

Code :
find /dossier_source -type f -name "*.xml" -exec mv -v {} /dossier_destination \;

Merci à tous pour votre aide.
rhesus est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2011, 12h07   #8
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Citation:
Envoyé par N_BaH Voir le message
Code :
(shopt -s globstar; mv -t /destination  /source/**/*.xml)
Super utile, merci

Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 13/05/2011, 06h32   #9
Futur Membre du Club
 
Homme
Technicien réseau
Inscription : avril 2011
Messages : 15
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 : 15
Points : 17
Points : 17
je cherche une explication supplémentaire sur la réponse de N_Bah
(shopt -s globstar; mv -t /destination /source/**/*.xml)

Pourquoi le double ** ?
syncope_nc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 06h53   #10
Futur Membre du Club
 
Homme
Technicien réseau
Inscription : avril 2011
Messages : 15
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 : 15
Points : 17
Points : 17
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.
syncope_nc 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 12h23.


 
 
 
 
Partenaires

Hébergement Web