GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cambiar el nombre del archivo pero mantener la extensión?

Aquí hay una respuesta para la pregunta de bonificación.

De hecho, quiero poner la fecha de creación de una foto en su nombre de archivo, para obtener algo como 20091231 2359 NewYear.jpg. ¿Me temo que necesito una combinación no trivial de comandos para lograrlo?

Suponiendo que desea tomar la fecha de creación de la foto de los datos EXIF, necesitará una herramienta separada para eso. Por suerte resulta que jhead ofrece una forma trivial de hacer exactamente lo que quieres, con su -n opción.

$ jhead -h
 [...]

 -n[format-string]

             Rename files according to date.  Uses exif date if present, file
             date otherwise.  If the optional format-string is not supplied,
             the format is mmdd-hhmmss.  If a format-string is given, it is
             is passed to the 'strftime' function for formatting
             In addition to strftime format codes:
             '%f' as part of the string will include the original file name
             [...]

He aquí un ejemplo:

$ jhead -n%Y-%m-%d-%f New_year.jpg   
New_year.jpg --> 2009-12-31-New_year.jpg

Editar :Por supuesto, para hacer esto con un montón de fotos, sería algo como:

$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done

Para ajustar el formato de la fecha a tu gusto, echa un vistazo a la salida de date --help , por ejemplo; enumerará los códigos de formato disponibles.

(jhead está ampliamente disponible para diferentes sistemas. Si, por ejemplo, está en Ubuntu o Debian, simplemente escriba sudo apt-get install jhead para instalarlo.)


Solo para la parte de cambio de nombre, el programa 'cambiar nombre' funcionará. Es lo mismo que el ejemplo que viste en la página del manual, solo que cambiado.

[email protected]:/tmp/q$ touch myfile.{a,b,c,d}
[email protected]:/tmp/q$ ls
myfile.a  myfile.b  myfile.c  myfile.d
[email protected]:/tmp/q$ rename -v s/myfile/yourfile/ myfile.*
myfile.a renamed as yourfile.a
myfile.b renamed as yourfile.b
myfile.c renamed as yourfile.c
myfile.d renamed as yourfile.d
[email protected]:/tmp/q$ ls
yourfile.a  yourfile.b  yourfile.c  yourfile.d
[email protected]:/tmp/q$ 

betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: yourfile.*: No such file or directory   
myfile.a    myfile.b
betelgeuse:tmp james$ for file
> in myfile.*
> do
> mv "${file}" "`echo $file | sed 's/myfile\./yourfile./'`"
> done
betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: myfile.*: No such file or directory
yourfile.a  yourfile.b

La clave es que, si ha visto un ejemplo que muestra cómo modificar una parte del nombre del archivo con una expresión regular, ese es el único ejemplo que necesita. Las extensiones no tienen un estado especial en los sistemas de archivos de Unix:son solo una parte del nombre del archivo que se encuentra después de un . personaje.


Linux
  1. Cambiar el nombre de un archivo en la terminal de Linux

  2. ¿Cómo cambiar el nombre de un archivo en Linux?

  3. 6 ejemplos de comandos mv para mover o renombrar archivos y directorios de Linux

  4. Linux - Reemplazo de espacios en los nombres de archivo

  5. ¿Hay un comando de Linux como mv pero con expresiones regulares?

Comando táctil de Linux

Comando Cat en Linux

Comando de archivo de Linux

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

Cómo cambiar el nombre de archivos y directorios en Linux

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