5 votos

Cambiar la fecha de creación del archivo a la fecha de creación del contenido utilizando el terminal

Tengo un montón de fotos con la fecha de creación y la fecha de modificación erróneas. Sin embargo, hay una tercera fecha, "contenido creado" que es correcta. user3439894 tenía esta línea de comando como respuesta a Cambiar la fecha de creación del archivo a la fecha de modificación utilizando el terminal

for f in *.[iI][mM][gG]; do m="$(GetFileInfo -m "$f")"; SetFile -m "$m" -d "$m" "$f"; done

Donde GetFileInfo lee la fecha de modificación y reescribe la fecha de creación. Muy útil y funciona muy bien (después de instalar las herramientas de línea de comandos) para muchas de mis imágenes que tienen la fecha de modificación correcta, gracias. Lo que estoy buscando ahora, es una sintaxis para la fecha de "contenido creado" que podría utilizar?

Cualquier ayuda sobre esto sería genial.

Actualización: Lo más fácil es probablemente instalar EXIFTOOL. Esta simple línea de comando en el terminal hizo el trabajo. Para establecer la "Fecha de Creación" a la hora de "DateTimeOriginal" de EXIF: exiftool "-FileModifyDate<DateTimeOriginal" *

para adelantar la hora en X horas puedes hacer: exiftool "-DateTimeOriginal-=1" *

1 votos

Añadir una solución a la propia pregunta es bastante confuso, véase apple.stackexchange.com/help/someone-answers para saber cómo manejar las respuestas útiles.

5voto

Michael Zhou Puntos 167

Usando las herramientas que forman parte de MacOS, empezamos por obtener el ContentCreationDate del archivo y lo colocamos en un contenedor ccd -

ccd=$(mdls -raw -n kMDItemContentCreationDate FILE)

A continuación, formateamos la cadena ContentCreationDate en una cadena utilizable por SetFile y colocarlo en un recipiente nct -

nct=$(date -f '%F %T %z' -j "$ccd" '+%D %T %z')

Por último, utilizamos SetFile y establecer el FSCreationDate a la cadena de fecha/hora modificada de ContentCreationDate -

SetFile -d "$nct" FILE

Estoy asumiendo que usted sabe cómo colocar todo esto en un bucle para el procesamiento de múltiples archivos.

Nota: Investiga exiftool

0 votos

Inteligente, aquí está cómo hacer la parte del núcleo, bien hecho y la respuesta súper clara.

3 votos

¡Muchas gracias! Soy un poco novato en Terminal, pero seguí tu consejo sobre exiftool, que resultó ser muy bueno! esta simple línea hizo el trabajo: exiftool "-FileModifyDate<DateTimeOriginal" *

2voto

colorful-shirts Puntos 103

Como mencionaste, este comando funciona muy bien para convertir automáticamente las fechas de "Creación de archivo" y "Modificación de archivo" a la fecha de "Contenido creado".

exiftool "-FileModifyDate<DateTimeOriginal" *

Pero una pequeña advertencia para aquellos no familiarizados con el terminal, este comando lo hará a cada archivo en el directorio de usuario por defecto. Si alguien tiene una carpeta específica en la que quiere ejecutar esto, mejor usar primero el comando " cd "en la carpeta que deseen.

Alternativamente, puedes pegar (no pulsar enter, sólo pegar) el comando sin el asterisco en una ventana de terminal:

exiftool "-FileModifyDate<DateTimeOriginal"

Y antes de ejecutar el comando, vuelve al Finder, selecciona los archivos que quieras y, literalmente, arrástralos a la ventana del terminal. Se auto-poblar con las listas de archivos y, a continuación, puede ejecutar el comando, sólo afecta a los archivos que usted eligió.

1voto

Michael Puntos 31

Y para algo totalmente diferente que sólo utiliza comandos básicos, puedes hacer esto:

# mv OriginalFileName.jpeg TempFileName.jpeg
# touch -t 199912310000 OriginalFileName.jpeg
# cat TempFileName.jpeg > OriginalFileName.jpeg

Los comandos básicos del sistema no quieren que juegues con la fecha de creación, porque, bueno, es la fecha de creación, que en realidad debería considerarse inmutable.

(¿Por qué utilizar touch cuando aquí hay buenos ejemplos utilizando SetFile ? Bueno, las fechas utilizadas por SetFile deben estar en la "Época Unix", lo que significa que deben estar entre 1970-01-10 y 2038-01-18. Si eso funciona para usted, bien, pero tengo un montón de fotografías escaneadas y documentos PDF de antes de 1970, y touch fijará las fechas de creación fuera de la época UNIX, hasta 1900. Además, el formato es más engañoso para SetFile, que no utiliza el formato de fecha/hora de la Norma ISO).

Así que esta solución básicamente copia el archivo, crea un archivo en un punto dado en el tiempo, luego copia el contenido de su archivo original en el archivo vacío creado.

Puede empaquetarlo fácilmente en una función del shell y guardarlo en su archivo .bashrc para facilitar su uso:

function recreate {
    mv "$2" /tmp/file_to_recreate
    touch -t $1 "$2"
    cat /tmp/file_to_recreate > "$2"
}

Ahora sólo tiene que escribir recreate 199912310000 MyPhoto.jpg y su función "recreará" el archivo con la fecha de creación deseada.

En touch con el parámetro "-t" toma una fecha-hora en el siguiente formato: AAAAMMDDHHmm. Debe introducir todos los caracteres. Las fechas inexistentes se aceptan silenciosamente sin error, y producen fechas arbitrarias impredecibles.

Lo utilizo para las fotografías, sí, pero también establezco la fecha de creación en la fecha de copyright de los libros en PDF que colecciono.

Tengo muchas diapositivas y fotografías escaneadas que no tienen una fecha de creación EXIF interna, por lo que no he incluido la actualización de los datos EXIF a partir de la fecha de creación del archivo en mi función.

En lugar de eso, hago lo contrario: Utilizo GraphicConverter que tiene el mejor acceso a datos EXIF/IPTC que he visto en cualquier aplicación normal (no Terminal). Puede establecer por lotes la fecha de creación interna EXIF a la fecha de creación del archivo con sólo un par de clics del ratón.

En la dirección contraria, es decir, establecer la fecha de creación del sistema de archivos en la fecha de creación EXIF interna del archivo, será necesario que exiftool . Esto te permitirá ampliar el script anterior obteniendo la fecha que utilizas en touch con una fecha del archivo de imagen, suministrada por exiftool .

Para ello, sustituya la cadena de fecha literal en el script anterior ("199912310000") por exiftool -createdate -d "%Y%m%d%H%M%S" -s3 entre comillas.

Aquí tienes una nueva función que he probado un poco. Toma un argumento: el nombre del archivo de imagen a re-actualizar.

function SetCreateFromExif {
    mv "$1" /tmp/file_to_re-create
    touch -t `exiftool -createdate -d "%Y%m%d%H%M.%S" /tmp/file_to_re-create` -s3 "$1"
    cat /tmp/file_to_re-create > "$1"
}

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