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.