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 25/09/2008, 20h43   #1
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 99
Points : 26
Points : 26
Par défaut script pour naviguer dans une arborescence

Bonjour,

Je ne sais pas comment donner un titre à mon sujet, désolé mais je vais essayer de vous expliquer!

Voilà, j'ai des sous repertoires qui contiennent des fichiers .exe, dans chaque sous repertoire.

exp: /toto/titi/tata/
dans toto, titi et tata, se trouvent des fichiers .exe

j'aimerai renomer ces fichiers en .txt.

Si j'avais des fichiers .exe uniquement par exemple dans /toto/titi/tata/*.exe, la solution est facile, faire juste:

Code :
1
2
3
4
5
6
#!/bin/sh
for i in /toto/titi/tata/*.exe
do
mv $i `basename $i .exe`.txt
done
exit0
sauf que je ne sais pas comment faire pour parcourir tous les repertoir et trouver ces fichiers pour ensuite les renommer.
J'ai pensé à find puis pipe |, mais je n'ai pas d'idée pour la syntaxe

Merci pour votre aide, je suis un débutant sur linux et le shell
nora2311 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 21h18   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 555
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 555
Points : 4 279
Points : 4 279
Salut,

Code :
1
2
3
4
5
6
7
 
#!/bin/sh
for i in `find <chemin> -name "*.exe" -type f`
do
mv $i `basename $i .exe`.txt
done
exit0
Il parcourera de manière récursive les sous-repertoires à partir de <chemin>
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 21h52   #3
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 99
Points : 26
Points : 26
Bonjour

Merci pour ton code, effectivement ça parcourt les sous répertoire, mais là je viens d'exécuter le programme ça marche, mais je n'ai plus les fichiers dans leurs répertoire mais à l'endroit de l'exécution du script!

En gros, mes fichier son renommé et déplacé dans mon répertoire courant. dans mon home, j'ai tous les fichiers en .txt, donc complètement déplacé des sous répertoires! ca vient de la commande mv! est ce que tu as une solution, ou quelqu'un sur ce forum??

merci
nora2311 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 22h07   #4
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 555
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 555
Points : 4 279
Points : 4 279
Re,

oui effectivement. tu peux récupérer le répertoire d'origine avec dirname pour les stocker au même endroit

Code :
1
2
3
4
5
6
7
8
 
#!/bin/sh
for i in `find <chemin> -name "*.exe" -type f`
do
target_dir=`dirname $i`
mv $i $target_dir/`basename $i .exe`.txt
done
exit0
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 22h38   #5
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 99
Points : 26
Points : 26
Désolée, mais ca ne marche pas,
est ce qu'il ne faut pas inverser $target_dir?
si je fais mv $i $taget_dir `basename $i .exe`.txt
j'ai le message: when moving multiple files, last argument must be a directory

j'ai aussi essayé de faire:

mv $target_dir $i `basename $target_dir $i .exe`.txt, une vrai cata! je suis à côté!

merci
nora2311 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 22h42   #6
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 555
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 555
Points : 4 279
Points : 4 279
Code :
1
2
mv $i $target_dir/`basename $i .exe`.txt
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 22h49   #7
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 99
Points : 26
Points : 26
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

ca marche, c'est super
nora2311 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2008, 15h22   #8
Modérateur
 
Avatar de pitipoisson
 
Homme Yves Reecht
Chercheur
Inscription : septembre 2006
Messages : 1 920
Détails du profil
Informations personnelles :
Nom : Homme Yves Reecht
Âge : 32
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : septembre 2006
Messages : 1 920
Points : 3 031
Points : 3 031
Bonjour,

Pour info, puisque le problème semble résolu : cette tâche peut être effectuée grâce aux possibilités offertes par find (entre autres !):
Code :
find toto -name "*.exe" -type f -exec bash -c "mv '{}' \`dirname '{}'\`/\`basename '{}' .exe\`.txt" \;
Vous pourrez trouver l'historique des tâtonnements qui ont conduits à cette solution, ainsi qu'une brève explication dans la discussion* : "utilisation de {} dans find -exec et commandes imbriquées".

* Edit: vous y trouverez également une autre solution intéressante à base de AWK...
pitipoisson 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 06h17.


 
 
 
 
Partenaires

Hébergement Web