Tenga en cuenta que está utilizando el script Perl llamadorename
distribuido por Debian y derivados (Ubuntu, Mint, ...). Otras distribuciones de Linux incluyen un comando llamado completamente diferente y considerablemente menos útil rename
.
y/A-Z/a-z/
traduce cada carácter en el rango A
medio Z
en el carácter correspondiente en la gama a
a través z
, por ejemplo, ASCII letras mayúsculas a la letra minúscula correspondiente. Para realizar la traducción opuesta, use y/a-z/A-Z/
. Otra manera de escribir el mismo comando es rename '$_ = uc($_)' *
- uc
es la U pper c función del ase, y el rename
comando cambia el nombre de archivos basado en la transformación hecha a la $_
variable.
rename '…' *
solo cambia el nombre de los archivos en el directorio actual, porque eso es lo que *
coincide. Los archivos de puntos (archivos cuyo nombre comienza con .
) también se omiten.
Si desea cambiar el nombre de los archivos en el directorio actual y en subdirectorios de forma recursiva, puede utilizar el find
comando para recorrer el directorio actual de forma recursiva. Aquí hay una dificultad: si llama rename
, esto cambia el nombre del directorio y la parte del nombre base. Si llama rename
a un directorio antes de recurrir a él ( find -exec rename … {} \;
), find
se confunde porque ha encontrado un directorio pero ese directorio ya no existe cuando intenta descender a él. Puede solucionar esto diciendo find
que atravesar un directorio antes de actuar sobre ella, pero luego terminan intentar cambiar el nombre foo/bar
a FOO/BAR
pero el directorio FOO
no existe.
Una forma sencilla de evitar esta dificultad es hacer que el comando de cambio de nombre actúe solo en la parte del nombre base de la ruta. La expresión regular ([^/]*\Z)
coincide con la parte final de la ruta que no contiene a /
.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
El shell zsh proporciona características más convenientes para renombrar, incluso más críptico que Perl, pero más terso y, a menudo, más fácil de componer.
La función zmv
renombra archivos basados en patrones. Corre autoload -U zmv
una vez para activarlo (pon esta línea en tu .zshrc
).
En el primer argumento de zmv
(el patrón a reemplazar), puede usar los poderosos patrones comodín de zsh . En el segundo argumento de zmv
(el texto de reemplazo), puede usar sus funciones de expansión de parámetros , incluidos los modificadores del historial .
zmv -w '**/*' '$1$2:u'
Explicación:
-w
- Asigna automáticamente variables numéricas a cada patrón comodín
**/*
- todos los archivos en subdirectorios, recursivamente ( **/
coincide con 0, 1 o más niveles de subdirectorios)
$1
- la primera variable numérica, que aquí coincide con la parte del directorio de cada ruta
$2:u
- la segunda variable numérica, que aquí coincide con la parte del nombre base de cada ruta, con el :u
modificador para convertir el valor a mayúsculas
Como una ventaja adicional, esto respeta la configuración regional del entorno.
Si no está seguro acerca de un zmv
comando que escribió, puede pasar la -n
opción de imprimir lo que haría el comando y no cambiar nada. Verifique la salida y, si hace lo que desea, vuelva a ejecutar el comando sin -n
actuar realmente.
rename 'y/a-z/A-Z/' *
obtendrás lo que quieres. Cuidado donde lo pruebas.