2010-02-27 11:13:48 +0000 2010-02-27 11:13:48 +0000
90
90

¿Cómo copiar un archivo en unix sin alterar su última hora de modificación?

Si copio algún archivo de un lugar a otro usando cp, la marca de tiempo del archivo copiado se ajusta a la hora de la copia.

¿Hay alguna forma de evitar esto?

Necesito copiar archivos sin alterar sus marcas de tiempo.

Respuestas (4)

106
106
106
2010-02-27 11:20:21 +0000

cp -p hace el truco. Para Linux :

-p igual que --preserve=mode,ownership,timestamps Para FreeBSD :

-p Hacer que cp conserve los siguientes atributos de cada archivo fuente en la copia: tiempo de modificación, tiempo de acceso, banderas de archivo, modo de archivo, ACL, ID de usuario e ID de grupo, según lo permitan los permisos.

Y para OS X :

-p Hacer que cp conserve los siguientes atributos de cada archivo de origen en la copia: tiempo de modificación, tiempo de acceso, banderas de archivo, modo de archivo, ID de usuario e ID de grupo, según lo permitan los permisos. También se conservarán las listas de control de acceso (ACL) y los atributos extendidos (EA), incluyendo las bifurcaciones de recursos.

Tenga en cuenta que esto puede cambiar el tiempo de acceso (atime) del archivo fuente, como se muestra en ls -lu. También se puede utilizar stat o stat -x para mostrar de forma agradable los tiempos de acceso a los datos, de modificación de los datos y de cambio de estado del archivo, a los que para macOS se puede añadir la hora de nacimiento utilizando un formato explícito :

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth (Btime): %SB%n" *
16
16
16
2015-06-09 15:45:17 +0000

Cuando se utiliza el cp de los GNU Coreutils , para preservar sólo las marcas de tiempo y no los atributos como el id de usuario, el id de grupo o el modo de archivo existe el longhand --preserve que permite especificar explícitamente una lista de atributos a preservar.

cp --preserve=timestamps source destination

Tenga en cuenta, sin embargo, que esta sintaxis probablemente no esté soportada en otras Unices. Una alternativa podría ser utilizar el parámetro --times de rsync que debería estar disponible en la mayoría de las instalaciones.

11
11
11
2010-02-27 11:23:37 +0000

Hay tres tiempos en un sistema de archivos Unix, el tiempo de acceso (atime), el tiempo de modificación (mtime), y el tiempo de cambio de inodo (ctime). Puede cambiar el tiempo de acceso y el tiempo de modificación con el programa touch, por ejemplo

cp orig copy touch -r orig copy

Sin embargo, no puede cambiar el tiempo de cambio de inodo.

0
0
0
2013-07-21 16:57:14 +0000

Hace poco necesité hacer algo similar pero usando symlink en su lugar. Para crear un enlace simbólico y conservar la marca de tiempo original: cp -ps src_file dst_symlink