+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!
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
Respuestas:
Uso de la expansión de parámetros de Shell :
Los
"
personajes se ocuparán de los nombres de archivo que contienen espacios, como suelen hacer las fotografías.fuente
/path/to/*.JPG
. Puede enviar su propia respuesta, por supuesto :)Si puede usar herramientas externas (no solo bash), ¡verifique el
rename
comando!El
rename
es parte deutil-linux
.fuente
perl
acepta diferentes argumentos para hacer lo mismo.Si tiene espacios en los nombres de archivo:
fuente
Sugeriría echar un vistazo al
mmv
comando. Es adecuado exactamente para este tipo de tareas. En su escenario sería: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:
fuente
Si no tiene espacios en los nombres de archivo:
fuente
mv
.