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

79

Si copio algún archivo de algún lugar a otro usando cp, la marca de tiempo en el archivo copiado se establece en el momento de la copia.

¿Hay alguna manera de evitar esto?

Necesito copiar archivos sin alterar sus marcas de tiempo.

Lazer
fuente

Respuestas:

92

cp -p Hace el truco. Para linux :

-p igual que --preserve=mode,ownership,timestamps

Para FreeBSD :

-p Haga que cp mantenga los siguientes atributos de cada archivo de origen en la copia: hora de modificación, tiempo de acceso, marcas de archivo, modo de archivo, ACL, ID de usuario e ID de grupo, según lo permitan los permisos.

Y para OS X :

-p Haga que cp mantenga los siguientes atributos de cada archivo de origen en la copia: hora de modificación, tiempo de acceso, marcas de archivo, modo de archivo, ID de usuario e ID de grupo, según lo permitan los permisos. Las listas de control de acceso (ACL) y los atributos extendidos (EA), incluidas las bifurcaciones de recursos, también se conservarán.

Arjan
fuente
20
cp -a también es bueno saberlo, implica no solo -p, sino también -R para copiar directorios completos y -d para preservar enlaces.
casualuser
2
Tenga en cuenta que cuando se utiliza el Coreutils GNU cp -p No solo conserva la marca de tiempo sino también modo y propiedad y en FreeBSD además del tiempo de modificación, también conserva »el tiempo de acceso, las marcas de archivo, el modo de archivo, la ACL, la ID de usuario y la ID de grupo, según lo permitido por los permisos. OS X adicionalmente "Atributos extendidos, incluyendo las fuentes de recursos".
Stefan Schmidt
en el último OSX, cp -p todavía toca la marca de tiempo del archivo fuente
afathman
12

Cuando usas cp desde el GNU Coreutils , para conservar solo las marcas de tiempo y no los atributos, como la identificación del usuario, la identificación del grupo o el modo de archivo, existe --preserve lo que permite especificar explícitamente una lista de atributos a preservar.

cp --preserve=timestamps source destination

Tenga en cuenta que esta sintaxis probablemente no sea compatible con otros Unices. Una alternativa podría ser utilizar el --times parámetro de rsync que debería estar disponible en la mayoría de las instalaciones.

Stefan Schmidt
fuente
3
Esta es la respuesta correcta. Utilizando -p No es la respuesta correcta. -p retiene la propiedad y amp; modo también. Lo que no puede ser deseado .. y no se le preguntó en la pregunta.
bshea
11

Hay tres veces 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 táctil, por ejemplo

cp orig copy
touch -r orig copy

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

gorilla
fuente
0

Hace poco necesité hacer algo similar pero en su lugar usé el enlace simbólico. Para crear un enlace simbólico y preservar la marca de tiempo orignal: cp -ps src_file dst_symlink

fduff
fuente
Como comentario, esto podría ser útil para algunos lectores, como respuesta agrega ruido para la mayoría de los lectores.
ndemou