J’ai un chargement de fichiers du format:
output_t00010000-0470090205_p000000.xdr output_t00010000-0470090205_p000001.xdr
etc.
Ce que je veux vraiment, c’est trouver tous les fichiers qui correspondent à t00010000 , et pour chaque fichier correspondant, renommez t00010000-0470090205 en t00000000-0000000000.
Donc j’ai fait quelque chose comme ça:
find . -depth -name *t00010000* | xargs rename t00010000-0470090205 t00000000-0000000000
Cela fonctionne très bien lorsque je connais la seconde moitié de la sous-chaîne, par exemple 0470090205, mais cette sous-chaîne est générée aléatoirement en fonction de la simulation que je lance et je ne la connais pas à l’avance. Donc, ce que je veux vraiment, c’est quelque chose comme:
find . -depth -name *t00010000* | xargs rename t00010000-?????????? t00000000-0000000000
mais renommer ne me laisse pas utiliser le? symbole de correspondance de caractère. J’ai vraiment du mal à comprendre cela. Quelqu’un peut-il aider?
Les arguments à rename
sont les suivants:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
Le perlexpr devrait être une expression Perl qui transforme le nom d’origine en un nouveau nom. Dans votre cas, ce serait:
rename 's/t\d+-\d+/t00000000-0000000000/'
Alors:
find . -depth -name *t00010000* | xargs rename 's/t\d+-\d+/t00000000-0000000000/'
Un bon moyen de tester le rename
est d’utiliser l’option -n
, qui vous indiquera comment chaque fichier sera renommé sans le faire.