Cambio de la fecha de creación de un archivo

62

¿Podría decirme cómo puedo cambiar la fecha de creación de un archivo en Lion? Me doy cuenta de que existe el comando touch-t, pero eso no funciona en Lion. Un par de personas han mencionado otra forma, pero creo que han escrito la solución en lenguaje "codificador" en lugar de lenguaje laico: ¿alguien podría responderlo de una manera que un laico pueda ejecutar?

Muchas gracias por su ayuda.

usuario55502
fuente
La explicación "codificadora" sobre la que otras personas han escrito es probablemente una referencia al "tacto". Tendría que abrir una Terminal, navegar a la carpeta donde está el archivo y luego usar el comando táctil para modificar la fecha de creación del archivo.
Derek Knight el
2
FWIW Estás en la línea correcta con "touch-t", pero hay un espacio entre h y -. Es "touch -t"
Derek Knight

Respuestas:

95

touch -tnormalmente solo cambia la modificación y los tiempos de acceso. Solo cambia el tiempo de creación si el tiempo objetivo es anterior al tiempo de creación original.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d siempre cambia el tiempo de creación.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile es parte del paquete de herramientas de línea de comandos que se puede descargar desde developer.apple.com/downloads o desde las preferencias de Xcode.

Lri
fuente
44
-m para cambiar el tiempo de modificación.
AlikElzin-kilaka
55
En Yosemite, tocar me exigió que usara el formato +%Y%m%d%H%M.%S(observe el punto entre minutos y segundos)
Calimo
Escribí una función llamada CpCreationDateen fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal
15

En Mac OS X parece haber cuatro marcas de tiempo diferentes asociadas con un archivo. Estas marcas de tiempo no siempre se actualizan de forma independiente el uno del otro, pero uno puede tener algún control individual con un poco de cuidado y con el uso de touch, SetFiley chown(o chmod). Para ver esto, experimentemos y creemos un nuevo archivo desde el símbolo del sistema #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

La primera fecha indicada es la última hora de acceso ( atime), la segunda es la última hora de modificación ( mtime), la tercera es el último cambio de estado ( ctime), la cuarta es la hora de creación del archivo (nacimiento, Btime), ver man lstat.

Para modificar el tiempo de acceso ( atime) a un tiempo específico, use:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Para modificar el tiempo de modificación ( mtime) y el tiempo de creación del archivo ( Btime) a un tiempo específico use:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Aparentemente, esto también actualiza automáticamente la hora del último cambio de estado ( ctime) a la hora actual del sistema.

Para modificar solo el tiempo de creación / nacimiento ( Btime) a un tiempo dado, use (como lo propusieron otros arriba):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Para modificar solo la hora del último cambio de estado ( ctime) a la hora actual del sistema, utilice, por ejemplo:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

donde usernamees el propietario del archivo (según lo informado por stato ls -l). Esto no cambia la propiedad del archivo, pero accede al inodo del archivo y lo registra como el último cambio de estado. Desafortunadamente, no es posible especificar la hora explícitamente aquí, excepto cambiar la hora de la computadora ...

En resumen, para poder cambiar las cuatro marcas de tiempo de forma independiente, se puede usar (en este orden para las últimas 3):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [establecer fecha del sistema] chown username <file>[volver a la fecha normal del sistema]

(Por supuesto, restablecer la fecha del sistema puede no ser una operación libre de riesgos, se le ha advertido).

armando.sano
fuente
+1 Gracias por esta respuesta súper detallada. Esto resolvió todos mis problemas.
Govind Rai
13

El comando de línea de touchcomandos funciona en Lion, pero necesita un poco de información sobre cómo usarlo.

En primer lugar, debe escribirlo, no es una utilidad que funcione gráficamente en una ventana. El lugar donde lo escribe es una aplicación llamada Terminal . Puede encontrar esto en su carpeta de Utilidades, o usar la búsqueda de Spotlight para encontrarlo.

Una vez que lo inicias, obtienes una ventana de línea de comandos donde puedes escribir comandos. El hecho de que esté escribiendo no significa que tenga algo que ver con la codificación, pero para alguien nuevo en los comandos del sistema operativo "anticuado" puede parecer un poco intimidante.

Entonces, el comando se llama táctil , y después del comando puede pasar varios parámetros, el único requerido es el nombre del archivo. Escribir lo siguiente establecerá la última fecha de modificación del archivo a la hora actual:

touch filename

Por supuesto, es posible que primero necesite encontrar el archivo, lo que podría requerir más comandos para acceder a él. el comando cd o Change Directory ayuda aquí:

cd ~/Desktop/files/PDFs
touch filename

O simplemente puede agregar la ruta completa al archivo como parte del comando:

touch ~/Desktop/files/PDFs/filename

El uso más avanzado del comando táctil le permite especificar el tiempo que desea establecer, en lugar de utilizar el tiempo de ejecución, establecer el acceso en lugar de los tiempos de modificación, etc. Esto es lo que hacen parámetros como -t y otros. Algunos configuran el tiempo para que sea el tiempo de otro archivo, otros lo configuran para retroceder o avanzar en el tiempo por X cantidad ( consulte aquí para obtener más detalles), por ejemplo:

touch -d '1 May 2005 10:22' file8

Lo siguiente es de esta página, que también es una referencia útil, y un gran ejemplo con algunos consejos para aquellos que no se sienten cómodos con las ubicaciones de los archivos en la línea de comandos.

Tenga en cuenta que esto cambiará los atributos de fecha de modificación y fecha de creación solo si su archivo se creó después de la fecha que ingresó. Esto se debe a que un archivo no se puede modificar antes de que se haya creado. Si se creó antes de la fecha establecida, solo se cambiará la fecha modificada.

¿Cómo cambiar el atributo de fecha de creación de un archivo?

  1. Abra la aplicación Terminal ( /Applications/Utilities/Terminal.app) o, si lo prefiere, use iTerm.

  2. Escriba esto en la Terminal (sin presionar enter / return) insertando la fecha en el formato de YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Abra una ventana del Finder y localice el archivo que desea modificar y arrástrelo y suéltelo en la ventana Terminal, luego insertará la ubicación del archivo utilizando la terminología de la línea de comando. Aquí hay un ejemplo de lo que se debe escribir en la Terminal en este punto:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    201212211111 en el ejemplo anterior representa "21 de diciembre de 2012 11:11 AM

stuffe
fuente
2
Pero touchmodifica la fecha de modificación, no la fecha de creación del archivo.
Daniel
1
Puede hacer las dos cosas. Depende de los parámetros.
estuffe
2
El uso touchde los parámetros que proporcionó anteriormente cambió la modificación pero no las fechas de creación de mi archivo de prueba.
Daniel
2
@Daniel Probablemente obtuviste tu respuesta, pero para completar touch , modifica la fecha de creación dependiendo de los argumentos. Si proporciona una fecha de modificación anterior a la fecha de creación del archivo, la fecha de creación cambiará automáticamente al nuevo valor de fecha de modificación, ya que un archivo no puede modificarse antes de crearse.
Govind Rai el
2
Acabo de probar esto en Sierra y tocar definitivamente no cambia la creationfecha. Pude cambiar accessy las modifiedfechas a una "fecha en el pasado", pero no modificó la fecha de creación. Verifique la página de manual para tocar, no menciona la fecha de creación. Sistema de archivos: Mac OS Extended (registrado, encriptado). El uso SetFile -d "$(GetFileInfo -m test.txt)" file.txtfuncionó a la perfección.
Jonathan Cross
7

Greats sugiere aquí, en particular el último (de Lauri Ranta, respondió el 21 de agosto a las 15:21). Perfekt!

Ahora uso un simple flujo de trabajo de Automator para cambiar por lotes múltiples archivos:

  1. Obtener elementos del buscador seleccionados
  2. Ejecute Shell Script, "Pasar entrada: como argumentos"

El script de shell es:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Esto funciona como un encanto.

Claudio Wilmanns
fuente
0

La forma más fácil que encontré fue crear una nueva carpeta, copiar todas las subcarpetas de la carpeta atenuada en la nueva carpeta, y listo, la nueva carpeta no está atenuada. Incluso puedes hacer esto en el buscador.

Lo que sería genial
fuente