Dar a todos los archivos una extensión .jpg


8

Tengo un directorio y algunas de las extensiones de los archivos están en mayúsculas (.JPG) en lugar de minúsculas.

Quiero asegurarme de que cada archivo tenga .jpg como extensión. ¿Cómo haría esto desde un indicador de shell?


Es una pena que Linux no tenga AppleScript.
gadgetmo

2
Es tan genial que Linux no tiene AppleScript.
matemáticas

Respuestas:


15

Uso de la expansión de parámetros de Shell :

for f in *.JPG; do
    mv "${f}" "${f%%.JPG}.jpg"
done

Los "personajes se ocuparán de los nombres de archivo que contienen espacios, como suelen hacer las fotografías.


55
+1 Esta solución funciona incluso si tiene espacios en el nombre del archivo, pero quiere decir "$ f" en lugar de "f".
Adam Zalcman

Shell Parameter Expansion es un poco críptico, uno podría usar basename en su lugar: para f en * .JPG; do mv "$ f" "` nombre base $ f .JPG`.jpg "; hecho
matemática

@math: prefiero mi versión, ya que funciona con nombres de archivo que contienen espacios en blanco y también funcionará con /path/to/*.JPG. Puede enviar su propia respuesta, por supuesto :)
Johnsyweb

Por supuesto, basename eliminará los directorios principales, pero funcionará con espacios dentro de los nombres de archivo. (No creo que esto valga una respuesta;) así que lo publiqué como un comentario)
matemáticas

10

Si puede usar herramientas externas (no solo bash), ¡verifique el renamecomando!

rename .JPG .jpg *

El renamees parte de util-linux.


cambiar el nombre es ... problemático. Se incluye una versión de cambio de nombre que perlacepta diferentes argumentos para hacer lo mismo.
cha0site

¿Podrías explicar un poco más? ¿Qué versión por cierto?
matemáticas

3

Si tiene espacios en los nombres de archivo:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done

2

Sugeriría echar un vistazo al mmvcomando. Es adecuado exactamente para este tipo de tareas. En su escenario sería:

#> mmv "*.JPG" "#1.jpg"

La página de manual está llena de ejemplos, por lo que no lleva tiempo acostumbrarse a ella.

En los sistemas Debian se puede instalar con:

#> aptitude install mmv

0

Si no tiene espacios en los nombres de archivo:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done

1
Sería bastante fácil hacer que esto funcione para archivos con espacios en el nombre: simplemente agregue comillas dobles alrededor de ambos argumentos mv.
Adam Zalcman

No tengo espacios ¿Qué agrego para que esto suceda en el directorio ACTUAL? En este momento recibo el error - mv: no se puede stat `* .JPG ': No existe tal archivo o directorio
Mark Flint

1
no tienes ningún JPG allí.
Karoly Horvath
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.