|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() Inscription : août 2011 Messages : 22 ![]() |
Bonjour à tous,
Je suis sur que beaucoup d'entre vous vont rigoler tellement c'est simple à faire, pour ma part j'ai la solution à mon problème, seulement elle fait intervenir trop d'outils. La problématique: J'ai un répertoire /fichiers_à_renommer/ contenant 1000 fichiers dont les noms sont Code :
Code :
J'ai une solution avec la ligne de commande Code :
for file in IMG0001; do mv $file ${file/*/Ma_première_photo} ;done Je pense qu'en ligne de commande c'est possible mais je ne vois pas comment m'y prendre, je suis sur que c'est super facile, mais après avoir cherché sur le forum, je n'ai pas trouvé quelque choses de similaire. Merci à ceux qui m'aideront. |
||||
|
|
10
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour,
en bash, en utilisant un tableau : Code bash :
|
||
|
|
20
|
|
|
#3 | ||
|
Nouveau Membre du Club
![]() Inscription : août 2011 Messages : 22 ![]() |
En effet, je n'ai pas pensé à utiliser un tableau, bien vue
![]() Par contre, j'ai un autre souci lors de l'exécution: Code :
|
||
|
|
10
|
|
|
#4 | ||||||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Bonjour,
Quelle version de bash as-tu ? Je crains qu'elle ne supporte pas cette solution : Code :
Code :
EDIT : reste à espérer que tes fichiers n'ont pas de blanc dans leur nom EDIT2 : Code :
|
||||||
|
|
11
|
|
|
#5 | ||||||
|
Nouveau Membre du Club
![]() Inscription : août 2011 Messages : 22 ![]() |
Super ça marche merci chardclo! Allez je vote pour toi +1
et pour N_BaH aussi ------------------------------------------------------------------------- Code :
Code :
i=1; while read line;do tabl[$i]=$line; i=$(($i+1));done < Fichier Code :
J'ai donc la seconde proposition qui marche (celle de chardclo), cependant, j'aimerai bien réussir à faire marcher la première (celle de N_BaH) si c'est possible, car la notion de tableau est très intéressante et réutilisable. La version de mon bash Code :
|
||||||
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Salut,
Je ne comprends pas le comportement que tu obtiens. Ce n'est pas normal que tu aies un nom existant dans le tableau tabl Pour contruire ton tableau, je te propose de procéder ainsi : Code :
Par ailleurs, tabl[$i]=$line; i=$(($i+1)) peut se simplifier ainsi : tabl[i++]="$line" (comme l'a indiqué N_BaH) EDIT : La version de bash s'obtient ainsi : |
||
|
|
10
|
|
|
#7 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Re,
Bon, j'ai compris pourquoi tu as ce comportement ! C'est lié au premier indice de ton tableau qui est 1 et non 0. En effet, au premier passage dans ta boucle de renommage, "n" n'est pas défini. Du coup ${tabl[n++]} retourne la valeur de ${tabl[0]} qui est vide. Ainsi mv "$fichier" "$rep/${tabl[n++]}" équivaut à mv "$fichier" "$rep/${tabl[0]}", c.a.d mv "$fichier" "$rep/"En conséquence, tu renommes IMG0001 vers lui même ! Voilà pour l'explication |
|
|
10
|
|
|
#8 | ||
|
Nouveau Membre du Club
![]() Inscription : août 2011 Messages : 22 ![]() |
Au passage...
Code :
Merci beaucoup, ça fonctionne maintenant Par contre pour l'alimentation de mon tableau je dois donc bien utiliser cette syntaxe: Code :
while read line;do tabl[i++]="$line" ;done < Fichier Un grand merci à tous les deux
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com