3 votos

Renombrar los nombres de los archivos en el directorio a la marca de tiempo de creación con precisión de segundos

¿Existe una manera fácil de hacer esto para los archivos en un directorio particular - para que sus nombres sean renombrados a la marca de tiempo del archivo, con una precisión de segundos

Aclaración:

Por ejemplo, supongamos que un directorio (Mac 10.14.15) tiene los siguientes archivos, donde la notación de abajo muestra el nombre original del archivo y la hora de creación del mismo. (Pero, para ser claros, estamos trabajando desde el directorio de archivos de Mac, y no desde el lujo de sólo analizar a través de un archivo de texto). Los nombres de los archivos son nombres de 36 caracteres uuid:

35eafb32-8005-11e9-bc42-526af7764f64.png 09:35:01
419f0eb4-8005-11e9-bc42-526af7764f64.png 09:35:11
43249984-8005-11e9-bc42-526af7764f64.png 21:02:03

Supongamos que quiero renombrar los archivos basándome en la marca de tiempo (de creación original), pero el nombre del archivo, por supuesto, tiene que estar en un formato aceptable:

prepend-09\_35\_01.png
prepend-09\_35\_11.png
prepend-21\_02\_03.png

(En el caso real, el directorio tiene más de 2000 archivos. Si importa, son transportados desde una aplicación de iPhone X que hice - a través de compartir archivos de iTunes. La fecha y la hora de creación de los archivos aparecen correctamente en Mac cuando se transfieren).

0 votos

¿Están los más de 2000 archivos en el mismo directorio? ¿Existen subdirectorios en el directorio que contiene los 2000+ archivos? ¿Es prepend en prepend-09_35_01.png ¿el nombre de archivo original? También dije: "Además, ya que tienes la etiqueta automator, muéstranos también tu flujo de trabajo", pero no has comentado ni has dicho qué tipo de solución prefieres, bash script para usar sólo en Terminal o en un flujo de trabajo de Automator, etc. Es una pena que no puedas ser explícito y específico.

0 votos

tbh no he sido capaz de conseguir nada para trabajar en automator para esto. tal vez terminal batch scripts podría ser un enfoque más fácil? y sí, todos los archivos en un directorio.

1 votos

He publicado una respuesta (en este momento hace 2 horas), ¿dices que no te ha funcionado?

6voto

user3439894 Puntos 5883

Si todos los archivos están en el mismo directorio , entonces en Terminal , cambió de directorio, por ejemplo
cd /path/to/directory y luego usar lo siguiente comando compuesto :

for f in *.*; do echo mv -n "$f" "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done

Nota: Hay un intensional echo comando que está ahí para que lo pruebes, y sólo imprimirá el mv comando para que veas que es el resultado que deseas. A continuación, puede volver a ejecutarlo eliminando sólo echo de la comando compuesto para renombrar realmente los archivos como se desee a través del mv comando .

Ejemplo:

$ touch 35eafb32-8005-11e9-bc42-526af7764f64.png 419f0eb4-8005-11e9-bc42-526af7764f64.png 43249984-8005-11e9-bc42-526af7764f64.png
$
$ ls -1
35eafb32-8005-11e9-bc42-526af7764f64.png
419f0eb4-8005-11e9-bc42-526af7764f64.png
43249984-8005-11e9-bc42-526af7764f64.png
$
$ for f in *.*; do echo mv -n "$f" "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done
mv -n 35eafb32-8005-11e9-bc42-526af7764f64.png 35eafb32-8005-11e9-bc42-526af7764f64-19_56_35.png
mv -n 419f0eb4-8005-11e9-bc42-526af7764f64.png 419f0eb4-8005-11e9-bc42-526af7764f64-19_56_35.png
mv -n 43249984-8005-11e9-bc42-526af7764f64.png 43249984-8005-11e9-bc42-526af7764f64-19_56_35.png
$
$ for f in *.*; do mv -n "$f" "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done
$
$ ls -1
35eafb32-8005-11e9-bc42-526af7764f64-19_56_35.png
419f0eb4-8005-11e9-bc42-526af7764f64-19_56_35.png
43249984-8005-11e9-bc42-526af7764f64-19_56_35.png
$ 

Comprender la bash comando compuesto :

  • for f in *.*; do ...; done    Por cada archivo en el dir actual haga lo siguiente comando(s) a ellos.
  • echo    Imprime lo que sigue. (Debe ser eliminado para el mv comando para que funcione de verdad).
  • mv -n source target    Mover archivos, no sobrescribir un archivo existente, nombre de archivo , nuevo nombre de archivo .
    • "$f"    El nombre del archivo de origen .
    • "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"    El nombre de archivo de destino .
    • ${f%.*}    Nombre parte de la nombre de archivo sin el extensión . Ver Ampliación de parámetros en el bash página de manual .
    • -    El carácter HYPHEN-MINUS.
    • $(...)    Sustitución de comandos , permite que el salida de un comando para reemplazar el nombre del comando .
    • stat -f'%SB' -t "%H_%M_%S" "$f"
    • stat    Muestra el estado del archivo. Ver su página de manual para más detalles.
    • -f'%SB'    -f formato    Muestra la información utilizando el formato especificado. Consulte la sección FORMATOS para ver una descripción de los formatos válidos. En este caso %SB representa salida de la cadena de la hora de nacimiento de la inode . (El tiempo el archivo se creó).
    • -t "%H_%M_%S"    -t tiempo    Muestra las marcas de tiempo utilizando el formato especificado. Este formato se pasa directamente a strftime(3). En este caso representa el hora un carácter de LÍNEA BAJA (también conocido como guión bajo), el minuto , un carácter de LÍNEA BAJA, el segundo .
    • %H    Se sustituye por el hora como un número decimal (00-23).
    • %M    Se sustituye por el minuto como número decimal (00-59).
    • %S    Se sustituye por el segundo como un número decimal (00-60).
    • "$f"    El nombre del archivo de origen .
    • .    El carácter de PUNTO FINAL. (También conocido como punto.)
    • ${f##*.}    El extensión parte de la nombre de archivo . Ver Ampliación de parámetros en el bash página de manual .

Tenga en cuenta que los nombres de los caracteres en mayúsculas son los que aparecen en el Visor de caracteres en una instalación de MacOS en inglés.

0 votos

una explicación muy completa. for f in *.*; do mv -n "$f" "prepend-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done ¡funcionó! ¡gracias!

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X