2 votes

Expressions multiples dans l'utilitaire de ligne de commande `rename`.

J'apprends à utiliser l'utilitaire Unix en ligne de commande. rename (voir, par exemple, https://www.tecmint.com/rename-multiple-files-in-linux/ ).

Le manuel pour rename dit que vous pouvez combiner plusieurs règles de renommage (remarquez, il s'agit d'un synopsis de l'utilisation où j'enlève d'autres arguments pour plus de clarté) :

rename [ -e|-E perlexpr]*|perlexpr [ files ]

J'essaie de le faire sur l'exemple suivant. J'ai un répertoire avec des fichiers :

$ ls
01.php  02.php  03.php

J'applique deux transformations en utilisant une rename invocation :

rename -n -v -e "s/\.php$/\.htm/" "y/a-z/A-Z/" *

Le comportement attendu est que je vais avoir :

$ ls
01.HTM  02.HTM  03.HTM

Cependant, la sortie de rename est

rename(01.php, 01.htm)
rename(02.php, 02.htm)
rename(03.php, 03.htm)

c'est-à-dire que la deuxième transformation (caractères minuscules vers majuscules) n'est pas appliquée.

Comment combiner plusieurs expressions ensemble ?

3voto

Toto Points 14447

Pour combiner plusieurs expressions, séparez-les par un point-virgule (séparateur d'instructions en Perl) :

rename -n -v -e "s/\.php$/\.htm/; y/a-z/A-Z/" *

Variantes supplémentaires basées sur les commentaires de @AFH

Une autre façon (pas besoin d'utiliser -e il suffit de combiner toutes les expressions avec ; ):

rename -n -v "s/\.php$/\.htm/; y/a-z/A-Z/" *

Une autre façon encore (faire précéder chaque expression de -e ; avis ; à la fin de la première expression) :

rename -n -v -e "s/\.php$/\.htm/;" -e "y/a-z/A-Z/" *

Pourtant, il y a encore une autre façon de procéder (faire précéder chaque expression de la mention -E qui ajoute ; implicitement) :

rename -n -v -E "s/\.php$/\.htm/" -E "y/a-z/A-Z/" *

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X