Come copiare un file in unix senza alterare la sua ultima modifica?


89

Se copio un file da un luogo all'altro utilizzando cp, il timestamp sul file copiato viene impostato sull'ora della copia.

C'è un modo per evitarlo?

Devo copiare i file senza alterare i loro timestamp.

Risposte:


103

cp -pfa il trucco. Per Linux :

-p uguale a --preserve=mode,ownership,timestamps

Per FreeBSD :

-p Causa cp per preservare i seguenti attributi di ciascun file sorgente nella copia: ora modifica, ora accesso, flag file, modalità file, ACL, ID utente e ID gruppo, come consentito dalle autorizzazioni.

E per OS X :

-pFare in modo che cp mantenga i seguenti attributi di ciascun file sorgente nella copia: ora modifica, ora accesso, flag file, modalità file, ID utente e ID gruppo, come consentito dalle autorizzazioni. Verranno inoltre conservati gli elenchi di controllo di accesso (ACL) e gli attributi estesi (EA), inclusi i fork di risorse.


25
cp -a è anche bello da sapere, implica non solo -p, ma anche -R per copiare intere directory e -d per preservare i collegamenti.
casualuser,

2
Nota che quando usi GNU Coreutils cp -pnon solo conserva il timestamp ma anche la modalità e la proprietà e su FreeBSD oltre al tempo di modifica conserva anche il tempo di accesso, flag di file, modalità file, ACL, ID utente e ID gruppo, come consentito mediante autorizzazioni. «e su OS X in aggiunta» Attributi estesi, inclusi fork di risorse «.
Stefan Schmidt,

sull'ultimo OSX, cp -p tocca ancora il timestamp del file sorgente
afathman

15

Quando si utilizza cpda GNU Coreutils , per conservare solo i timestamp e non gli attributi come ID utente, ID gruppo o modalità file, è presente il longhand --preserveche consente di specificare esplicitamente un elenco di attributi da conservare.

cp --preserve=timestamps source destination

Tuttavia, tieni presente che questa sintassi probabilmente non è supportata su altri Unices. Un'alternativa potrebbe essere quella di utilizzare il --timesparametro di rsynccui dovrebbe essere disponibile sulla maggior parte delle installazioni.


4
Questa è la risposta corretta L'uso -pnon è la risposta corretta. -pmantiene anche la proprietà e la modalità. Che non può essere voluto .. e non è stato chiesto in questione.
bshea,

10

Ci sono tre volte su un filesystem Unix, il tempo di accesso (atime), il tempo di modifica (mtime) e il tempo di cambio dell'inode (ctime). Ad esempio, è possibile modificare il tempo di accesso e il tempo di modifica con il programma touch

cp orig copy
toccare -r orig copia

Tuttavia, non è possibile modificare il tempo di cambio dell'inode.


1
per il tempo di cambio dell'inode, vedi anche linux - Impostazione creazione o modifica timestamp
StackTranslate.it

0

Di recente ho dovuto fare qualcosa di simile ma usando invece symlink. Per creare un collegamento simbolico e conservare il timestamp originale:cp -ps src_file dst_symlink


Come commento questo potrebbe essere utile per alcuni lettori, come risposta aggiunge rumore per la maggior parte dei lettori.
ndemou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.