Bonjour,
On 16 mai 08, at 10:59, Maurice Inzirillo 4DNC wrote:
> Exemple :
>
> fichier original : 'Windows XP Professional VM-2-s025.vmdk'
> nouveau nom du fichier: 'Windows XP Professional VM-4-s025.vmdk'
>
> Voilà la ligne de commande que j'ai réalisé
>
> ls -1 *VM-* | sed -E "s/(.*)(VM\-[0-9]+)(.*)/printf \"mv \'\\1\\2\\3\'
> \'\\1VM\-4\\3\'\"/g" | sh
>
> Le résultat n'est pas tout à fait probant car cela me donne une
> enfilade du type :
>
>
> mv 'Windows XP Professional VM-2-000001-s001.vmdk' 'Windows XP
> Professional VM-4-000001-s001.vmdk'mv 'Windows XP Professional
> VM-2-000001-s002.vmdk' 'Windows XP Professional VM-4-000001-
> s002.vmdk'mv 'Windows XP Professional VM-2-000001-s003.vmdk' 'Windows
effectivement, cela ne risque pas de fonctionner très bien. Je
m'interroge pas mal sur ton printf. Si tu envoies du printf dans sh,
c'est normal que le résultat soit un printf des arguments de ce dernier.
Tu envoies ça à sh :
printf "mv 'Windows XP Professional VM-1-000001-s001.vmdk' 'Windows
XP Professional VM-4-000001-s001.vmdk'"
c'est normal qu'en sortie tu ais :
mv 'Windows XP Professional VM-1-000001-s001.vmdk' 'Windows XP
Professional VM-4-000001-s001.vmdk'
Maintenant, en supprimant le printf et les guillemets on a :
ls -1 *VM-* | sed -E "s/(.*)(VM\-[0-9]+)(.*)/mv \'\\1\\2\\3\' \'\
\1VM\-4\\3\'/g" | sh
qui exécute bien tes mv. Néanmoins, ce n'est pas prudent, je te
recommande de faire une première exécution "à blanc" pour voir ce que
ça donne :
ls -1 *VM-* | sed -E "s/(.*)(VM\-[0-9]+)(.*)/mv \'\\1\\2\\3\' \'\
\1VM\-4\\3\'/g"
tu obtiens alors le listing des commandes mv à effectuer. Tu valides
qu'il fait pas de bêtise, et tu refais la même commande avec "| sh".
patpro
_______________________________________________
archives :
http://listes.patpro.net/list/sshfr.fr.html
http://listes.patpro.net/mailman/listinfo/script_shell_fr