|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
bonjour,
je m'inscrit sur votre forum car je n'arrive pas a résoudre pour prb. je suis débutant en shell et je coince pour créér un petit script me permettant de déplacer tous les fichiers vidéo stocke dans un répertoire ou sous répertoire vers un autre emplacement. le déplacement me pose prb lorsque les répertoires ou sous répertoire ou fichiers contiennent un ou plusieurs espaces dans leur nom. donc au début de mon script il faudrait que je remplace tous les espaces par des _. Code :
Code :
j'ai essaye: Code :
Code :
auriez une petite idee afin de réaliser le renommage sur l'ensemble du répertoire et sous répertoire ? merci d'avance pour votre aide |
||||||||
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Inscription : décembre 2010 Messages : 20 ![]() |
il existe la commande ls -R <nom_du répertoire>, mais je ne sais pas qi cela te conviendra par la suite.
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
je ne connaissais pas cette option (--recursive ) mais me donne le même résultat que ls * ou find * . afficher les sous rep et fichier pas de soucis mais exécuter une commande dessus c'est la que je coince...
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 065 ![]() |
Code :
find rep/ -type f -exec rename 's/ /_/g' {} \; |
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
merci mais idem ne modifie que les fichiers dans le rep initial , les fichiers contenu dans les sous rep ne sont pas impactés...
|
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 544 ![]() |
Salut,
et en ajoutant l'option suivante à find, ça donne quoi? Code :
__________________
Alea Jacta Test! |
||
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
alors en fait si cela fonctionne si j'utilise la commande autant de fois qu'il y à de sous répertoires !
à la première exécution j'ai des messages du type: Code :
Code :
find: "/home/cyril/downloads/complete/test___3/test 4": Aucun fichier ou dossier de ce type apres j'utilise la même commande pour les fichiers et la cela fonctionne partout car il n'y a plus d'espace dans les noms de rep ^^ si j'ajoute l'option -depth >> idem oblige de le faire le nombre de fois le nombre de sous répertoire avec une erreur un peu différente: Code :
Can't rename /home/cyril/downloads/complete/test 2/sous rep /home/cyril/downloads/complete/test_2/sous_rep: Aucun fichier ou dossier de ce type
merci a vous pour votre aide |
||
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 065 ![]() |
essaie avec ce script :
Code :
|
||
|
|
10
|
|
|
#9 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
alors la chapeau cela fonctionne mais cela fonctionne même trop bien ^^
j'ai mis ton code dans un fichier test.sh que j'exécute dans le répertoire qui m'intéresse . tout est renomme nickel sauf que le script ne s'arrête plus ! ( j'ai ajouter un exit 0 a la fin)le processus m'utilise 100% du proce et encore mieux quand je me déplace dans d'autre rep il me renomme tous également oblige de kill le processus test.sh manuellement. par contre etant débutant j'avoue ne plus rien comprendre au script pourquoi deux crochets pour: [[ $1 == *\ * ]] set -x ????? recurs "$1" ?? grand merci a toi |
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 065 ![]() |
Ah, la boulette ! Désolé, j'ai été trop léger sur les tests : il faut spécifier un répertoire en argument lorsque tu lances le script
Citation:
remplace :ainsi, si tu ne donnes pas de répertoire en argument, le répertoire courant sera utilisé. Ou alors on fait un test plus complet : Code :
set -x affiche les commandes et leurs arguments quand elles sont exécutées |
|||
|
|
10
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
si je souhaite ne pas utiliser d'argument au lancement est ce que c'est bon si j'écris cela ?? (désole mais y a trop de variables je comprend plus rien)
Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 065 ![]() |
non, les fonctions rename et recurs ne doivent pas changer, elles travaillent toujours sur le premier argument qui leur est donné ( => $1);
par contre tu appelleras recurs ainsi :les fonctions utilisent des paramètres positionnels, comme les scripts; pour exemple, regarde cette fonction simple : Code :
|
||
|
|
10
|
|
|
#13 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 7 ![]() |
encore un grand merci a toi pour ton aide précieuse
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com