¿Cómo puedo cambiar la fecha de modificación/creación de un archivo?

¿Cómo puedo cambiar la fecha de modificación/creación de un archivo?

¿Hay alguna forma de cambiar la fecha en que se modificó/creó un archivo (que se muestra en Nautilus o con el comando ls -l)? Idealmente, estoy buscando un comando que pueda cambiar las marcas de fecha/hora de un montón de archivos a una cierta cantidad de tiempo antes o después (por ejemplo, +8 horas o -4 días, etc.).

Respuesta1

Siempre que sea el propietario del archivo (o raíz), puede cambiar la hora de modificación de un archivo usando el touchcomando:

touch filename

De forma predeterminada, esto establecerá la hora de modificación del archivo en la hora actual, pero hay una serie de indicadores, como el -dindicador para elegir una fecha en particular. Entonces, por ejemplo, para configurar un archivo como modificado dos horas antes del presente, puede usar lo siguiente:

touch -d "2 hours ago" filename

Si desea modificar el archivo en relación con su hora de modificación existente, lo siguiente debería ser suficiente:

touch -d "$(date -R -r filename) - 2 hours" filename

Si desea modificar una gran cantidad de archivos, puede utilizar lo siguiente:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

Puede cambiar los argumentos para findseleccionar solo los archivos que le interesan. Si solo desea actualizar los tiempos de modificación del archivo en relación con la hora actual, puede simplificar esto a:

find DIRECTORY -exec touch -d "2 hours ago" {} +

Esta forma no es posible con la versión relativa a la hora del archivo porque utiliza el shell para formar los argumentos de touch.

En cuanto al tiempo de creación, la mayoría de los sistemas de archivos Linux no realizan un seguimiento de este valor. Hay un archivo ctimeasociado con los archivos, pero rastrea cuándo se cambiaron por última vez los metadatos del archivo. Si nunca se cambian los permisos del archivo, es posible que mantenga el tiempo de creación, pero esto es una coincidencia. Cambiar explícitamente el tiempo de modificación del archivo cuenta como un cambio de metadatos, por lo que también tendrá el efecto secundario de actualizar el archivo ctime.

Respuesta2

La forma más sencilla: el acceso y la modificación serán los mismos:

touch -a -m -t 201512180130.09 fileName.ext

Dónde:

-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Si desea utilizar, NOWsimplemente suelte -ty la marca de tiempo.

Para comprobar que son todos iguales: stat fileName.ext

Ver:toque de hombre

Respuesta3

Gracias por la ayuda. Esto funcionó para mí:

En la terminal, vaya al directorio para editar la fecha. Luego escribe:

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

Verá un ">" después de presionar Enter, excepto la última vez -> "listo".

Nota: Es posible que desees cambiar "201203101513"

"201203101513" = es la fecha que desea para todos los archivos en este directorio.

Respuesta4

Este pequeño script al menos funciona para mí:

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

información relacionada