¿Hay alguna manera de cambiar el nombre de todos los archivos en un directorio a minúsculas | mayúsculas?
Estoy buscando un comando oneliner .
Me encantó TotalCommander's alt+f7
, ahora necesito esa funcionalidad en la Terminal
¿Hay alguna manera de cambiar el nombre de todos los archivos en un directorio a minúsculas | mayúsculas?
Estoy buscando un comando oneliner .
Me encantó TotalCommander's alt+f7
, ahora necesito esa funcionalidad en la Terminal
Respuestas:
Para cada archivo a_file
en el directorio actual, cambie el nombre a_file
a minúsculas.
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
Para mayúsculas, invierta los argumentos para [:lower:] [:upper:]
tr
enlace de referencia de comando
Actualizar
Para aún más control *
puede ser reemplazado con ls
.
Por ejemplo, en un directorio que contiene 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg y 3.jpg para filtrar solo archivos * .jpg, ls
se pueden usar:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
El código anterior asignará a la a_file
variable todos los archivos con extensión .jpg.
-v
Opción de actualización agregada al mv
comando según sds sugerido.
Hay una utilidad más elegante y general llamada prename
.
Escrito por Larry Wall, viene con perl
lo más probable es que ya esté disponible en su sistema como /usr/bin/prename
(si tiene alternativas de configuración también puede estar disponible como /usr/bin/rename
enlace simbólico a través de / etc / alternativas a prename
)
Al usarlo, puede cambiar el nombre de varios archivos en un comando al proporcionar cualquier expresión perl (incluidas, entre otras, la sustitución s///
o la transcripción de caracteres tr///
):
Ejemplos:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
Y así.
Otra cosa buena acerca de prename es que lo protege, en el caso de cambiar el nombre de un archivo a un nombre de archivo existente.
man prename
para más detalles.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
poner tu patrón.-maxdepth 0
: Solo el directorio actual.rename
-n, -nono
: Sin acción: imprime los nombres de los archivos a renombrar, pero no cambies el nombre.y/source/dest/
: Transcribe los caracteres en el espacio del patrón que aparecen en la fuente al carácter correspondiente en el destino.
mv
para que vea lo que se está haciendo; es posible que no desee pasar "-f" porque esto puede