GNU/Linux >> Tutoriales Linux >  >> Linux

Linux cambia el nombre de los archivos a mayúsculas

El bash shell tiene una sintaxis para traducir un nombre de variable a mayúsculas.

for file in * ; do      # or *.jpg, or x*.jpg, or whatever
    mv "$file" "${file^^}"
done

Esta característica se introdujo en la versión 4.0 de bash, así que primero verifique que su versión de bash lo implementa. Para evitar errores, pruébalo una vez reemplazando mv por echo mv , solo para asegurarte de que hará lo que quieres.

La documentación para esta característica está aquí, o escriba info bash y busque "superior".

Probablemente debería decidir qué hacer si el archivo de destino ya existe (por ejemplo, si tanto x00000.jpg y X00000.JPG ya existe), a menos que esté seguro de que no es un problema. Para detectar tales colisiones de nombres, puede probar:

ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n

y busque cualquier línea que no comience con 1 .


rename

Probablemente la forma más fácil de cambiar el nombre de varios archivos es usar rename de Perl. . Para traducir nombres en minúsculas a mayúsculas:

rename 'y/a-z/A-Z/' *

Si los archivos también están en subdirectorios, puede usar globstar o find :

find . -maxdepth 1 -type f -iname "*.jpg" -execdir rename "y/a-z/A-Z/" {} +

Referencias

  • Cómo:Linux cambia el nombre de varios archivos en un indicador de Shell:nixCraft
  • Más información sobre y/ , traducir en lugar de s sustituir.
  • DistroTube - Herramientas para renombrar archivos en Linux

for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done

No puede cambiar el nombre de los archivos solo desde Bash, porque Bash no tiene ningún comando integrado para cambiar el nombre de los archivos. Tienes que usar al menos un comando externo para eso.

Si se permite Perl:

perl -e 'for(@ARGV){rename$_,uc}' *.jpg

Si Python está permitido:

python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg

Si tiene miles de archivos o más, las soluciones anteriores son rápidas y las soluciones a continuación son notablemente más lentas.

Si es AWK, ls y mv están permitidos:

# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"

Si tiene muchos archivos, las soluciones anteriores no funcionan porque *.jpg se expande a una lista de argumentos demasiado larga (error:Lista de argumentos demasiado larga ).

Si tr y mv están permitidos, luego vea la respuesta de damienfrancois.

Si mv está permitido:

for file in *; do mv -- "$file" "${file^^}"; done

Tenga en cuenta que estos cambian el nombre de .jpg a .JPG al final, pero puedes modificarlos para evitarlo.


Linux
  1. Cómo cambiar el nombre de los archivos en Linux

  2. Cómo cambiar el nombre de varios archivos a la vez en Linux

  3. Cómo cambiar el nombre de varios archivos juntos en Linux usando 3 métodos

  4. Encuentre múltiples archivos y cámbieles el nombre en Linux

  5. Convierta un montón de archivos BMP a JPEG en Linux

Comando Rm en Linux

Cómo cambiar el nombre de los archivos usando la línea de comandos en Linux

Cómo cambiar el nombre de un archivo (s) en Linux

8 métodos para cambiar el nombre de varios archivos a la vez en Linux

Steganography – Ocultar archivos dentro de imágenes en Linux

Extensión de cambio de nombre de varios archivos de Linux