4 votos

¿Establecer la fecha de creación/modificación del archivo en la primera de las dos para un montón de archivos?

He buscado una respuesta a esto durante un tiempo, pero no he podido encontrarla. Tengo un montón de archivos wav (miles de ellos) en una biblioteca de sonidos que de alguna manera se actualizó la fecha de modificación o de creación muy recientemente, a pesar de que no los he tocado de ninguna manera durante años.

¿Hay alguna forma de utilizar Automator para crear una aplicación a la que pueda arrastrar y soltar estos archivos (o un archivo de texto que contenga todas sus rutas y nombres de archivo) que haga lo siguiente?

  • Comprueba los datos de la marca de tiempo asociada al archivo (fecha/hora: modificado, y creado)
  • Comprueba qué marca de tiempo es la más temprana de las dos
  • Si la marca de tiempo creada es anterior a la modificada, cambia la marca de tiempo modificada por la creada, o viceversa.

Sé cómo obtener la fecha de modificación o creación en el terminal, y cómo hacer un bucle a través de los archivos recibidos como entrada. Pero no estoy seguro de cómo comparar las marcas de tiempo en un script para determinar cuál es anterior, o cómo formatear específicamente el script/app que haría esto automáticamente para cada archivo.

Tengo el siguiente script de otro hilo. Pero esto sólo establecerá la fecha de modificación a la fecha de creación sin comprobar cuál es anterior.

for f in *.wav; do
   olddate=$(stat -f %SB -t %Y%m%d%H%M "$f")
   touch -m -t $olddate "$f"    
done

Y en caso de que suponga una diferencia, estoy en un MacBook Pro con MacOS Sierra 10.12.6.

Por último, si esto sería más apropiado para una red diferente (stackoverflow o superusuario tal vez), por favor LMK y voy a preguntar allí en su lugar.

Gracias de antemano por la ayuda.

3voto

user3439894 Puntos 5883

El ejemplo shell script código que se muestra a continuación, utiliza GetFileInfo y SetFile de Herramientas de línea de comandos para Xcode que este último es necesario para cambiar el fecha de creación , como touch sólo puede cambiar el acceder a y modificación tiempos.

Si no tiene Xcode instalado, entonces sólo hay que instalar el Herramientas de línea de comandos para Xcode ...

En la terminal: xcode-select --install

Después de instalar Herramientas de línea de comandos para Xcode , entonces en Automatizador puede crear un flujo de trabajo o Servicio/Acción Rápida con el correspondiente acciones para pasar el objetivo archivos a un Ejecutar Shell script acción con ajustes Shell: [/bin/bash] y Pasa la entrada: [como argumentos] utilizando lo siguiente ejemplo shell script código :

for f in "$@"; do

    [ -f "$f" ] || continue

    c="$(GetFileInfo -d "$f")"
    m="$(GetFileInfo -m "$f")"

    ec="$(date -j -f "%m/%d/%Y %H:%M:%S" "$c" +%s)"
    em="$(date -j -f "%m/%d/%Y %H:%M:%S" "$m" +%s)"

    if [ "$ec" -lt "$em" ]; then
        SetFile -m "$c" "$f"
    fi

    if [ "$em" -lt "$ec" ]; then
        SetFile -d "$m" "$f"
    fi

done

Cómo la shell script funciona:

  • for f in "$@"; do -- Para cada archivo hacer algo .
  • [ -f "$f" ] || continue -- Si no es un archivo , luego pasa a la siguiente artículo pasó.
  • c="$(GetFileInfo -d "$f")" -- Obtiene el fecha de creación de la archivo .
  • m="$(GetFileInfo -m "$f")" -- Obtiene el fecha de modificación de la archivo .
  • ec="$(date -j -f "%m/%d/%Y %H:%M:%S" "$c" +%s)" -- Convierte el fecha de creación al número segundos desde Época .
  • em="$(date -j -f "%m/%d/%Y %H:%M:%S" "$m" +%s)" -- Convierte el fecha de modificación al número segundos desde Época .
  • if [ "$ec" -lt "$em" ]; then -- Si el Época fecha de creación segundos es menor que el Época fecha de modificación segundos Entonces:
    • SetFile -m "$c" "$f" -- Establece el fecha de modificación de la archivo a la fecha de creación de la archivo .
  • if [ "$em" -lt "$ec" ]; then -- Si el Época fecha de modificación segundos es menor que el Época fecha de creación segundos Entonces:
    • SetFile -d "$m" "$f" -- Establece el fecha de creación de la archivo a la fecha de modificación de la archivo .

Notas:

Época (00:00:00 UTC, 1 de enero de 1970; véase la hora(3).


Ejemplo Automatizador flujo de trabajo :

Sólo hay que añadir el padre carpeta que contiene el .wav archivos a la Obtener los elementos del buscador especificados acción y el resto del acciones .

Tenga en cuenta que esto es sólo un ejemplo, la parte principal es el Ejecutar Shell script acción Así que como quiera pasar el objetivo archivos a ella es tu elección.

enter image description here

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