Pregunta Cambiar el nombre de los archivos JPG según la fecha de creación


Quiero cambiar el nombre de todos los archivos en un directorio determinado. Renombrándolos a su fecha de creación.
Entonces, si mi archivo es Image1.jpg, debería cambiarle el nombre a algo así como "Jan 16 12:09:42 2011.jpg"
Quiero hacer esto a través de la línea de comando. He estado intentando:

stat -f %SB Image0100.jpg

Pero, ¿cómo puedo combinar esto con mv ¿mando? Y cómo voy a iterar stat y mv a través de todos los archivos?
¿O hay formas simples de cambiar el nombre de todos los archivos con su creación de fecha?


25
2018-01-17 07:01


origen


Respuestas:


jhead -n DSCN0382.JPG
DSCN0382.JPG --> 0408-150734.jpg

cualquier argumento strftime puede ser dado también:

jhead -n%Y%m%d-%H%M%S *.jpg 

Esto cambiará el nombre de los archivos que coincidan con * .jpg en el formato YYYYMMDD-HHMMSS

jhead -n%Y%m%d-%H%M%S DSCN0382.JPG
DSCN0382.JPG --> 20120408-150734.jpg

ver también la página man para muchas otras opciones geniales. Por ejemplo, puede corregir (cambiar) la fecha EXIF. Esto es muy útil cuando se combinan archivos de diferentes cámaras cuando algunas cámaras tienen un horario incorrecto.


54
2017-07-14 12:51



Si estás trabajando con JPG que contiene EXIF datos (es decir, de la cámara digital), luego puede usar siguiente para obtener la fecha de creación en lugar de la estadística.

exif -t 0x9003 -m Image0100.jpg

Por solicitud, aquí está el comando y la salida. Un par de puntos a tener en cuenta:

  • Como no todos los archivos tienen datos exif, queremos verificar que dst es válido antes de hacer el resto de los comandos.
  • La salida de exif tiene un espacio, que es un PITA para nombres de archivos. Usa sed para reemplazar con '-'.
  • Tenga en cuenta que uso 'echo' antes del mv para probar mis scripts. Cuando confías en que está haciendo lo correcto, puedes eliminar el "eco" ... no quieres terminar como el tipo que hizo volar todos los archivos.

Mando

for i in *.jpg; do
  dst=$(exif -t 0x9003 -m $i ) &&
  dst_esc=$(echo $dst | sed 's/ /-/g' ) &&
  echo mv $i $dst_esc.jpg
done

Salida

'12379632.jpg' does not contain tag 'DateTimeOriginal'.
mv 15084688.jpg 2003:02:28-21:48:54.jpg
mv 15136312.jpg 2003:03:01-10:36:05.jpg
mv 15137960.jpg 2003:03:01-10:36:38.jpg
mv 15140744.jpg 2003:03:01-10:37:46.jpg

15
2018-01-17 07:19



for file in *jpg
do
 newfile=$(date "+%b %d %H:%M:%S%Y $file" -d "$(stat -c "%y" $file)")
 mv "$file" "$newfile"
done$

5
2018-01-17 08:08



La mayoría de los sistemas de archivos POSIX no registran el tiempo de creación (y la API ciertamente no lo expone, incluso si está grabado), por lo que eres SOL.


1
2018-01-17 07:04



$ for i in *; do mv "$i" "`stat -f %SB $i`"; done

1
2018-01-17 07:07



find . -type f | xargs stat -f "mv %%N \"%%SB.jpg\"" | awk -F \; '{system $1;}'

1
2018-01-18 18:14



También hay:

rename -v 's/.JPG/.jpeg/' *.JPG
rename -v 's/.jpeg/.jpg/' *.jpeg
exiv2 -r'RP_%Y%m%d_%H%M%S' rename *.jpg

para dar RP_20120801_063021.jpg por ejemplo. Esto funciona para Debian Linuxes (por ejemplo, Ubuntu).

Los comandos de cambio de nombre son para cuando algunas imágenes son .JPG o .jpeg. No se puede convertir .JPG directamente a .jpg ya que se interpreta como el mismo ...


1
2017-12-23 17:36