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

Come copiare un file in unix senza alterare il suo tempo di ultima modifica?

Se copio qualche file da un posto ad un altro usando cp, il timestamp sul file copiato viene impostato al tempo della copia.

C'è un modo per evitarlo?

Ho bisogno di copiare file senza alterare i loro timestamp.

Risposte (4)

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

cp -p fa il trucco. Per Linux :

-p uguale a --preserve=mode,ownership,timestamps Per FreeBSD :

-p Fa sì che cp conservi i seguenti attributi di ogni file sorgente nella copia: tempo di modifica, tempo di accesso, flags del file, modalità del file, ACL, ID utente e ID gruppo, come consentito dai permessi.

e per OS X :

-p Fa sì che cp conservi i seguenti attributi di ogni file sorgente nella copia: tempo di modifica, tempo di accesso, flag del file, modalità del file, ID utente e ID gruppo, come consentito dai permessi. Saranno conservate anche le liste di controllo dell'accesso (ACL) e gli attributi estesi (EA), inclusi i fork di risorse.

Nota che questo può/potrà cambiare il tempo di accesso del file sorgente (atime), come mostrato da ls -lu. Inoltre, stat o stat -x possono essere usati per mostrare piacevolmente i tempi di accesso ai dati, di modifica dei dati e di cambiamento dello stato del file, a cui per macOS può essere aggiunto il tempo di nascita usando una formattazione esplicita :

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

Quando si usa cp delle GNU Coreutils , per preservare solo i timestamp e non gli attributi come l'id utente, l'id gruppo o la modalità del file c'è il longhand --preserve che permette di specificare esplicitamente una lista di attributi da preservare.

cp --preserve=timestamps source destination

Attenzione però che questa sintassi non è probabilmente supportata su altre unità. Un'alternativa potrebbe essere quella di utilizzare il parametro --times che dovrebbe essere disponibile sulla maggior parte delle installazioni.

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

Ci sono tre tempi su un filesystem Unix, il tempo di accesso (atime), il tempo di modifica (mtime) e il tempo di cambio inode (ctime). Potete cambiare il tempo di accesso e il tempo di modifica con il programma touch, per esempio

cp orig copy touch -r orig copy

Tuttavia, non potete cambiare il tempo di cambio inode.

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

Recentemente ho avuto bisogno di fare qualcosa di simile, ma usando invece un link simbolico. Per creare un link simbolico e preservare il timestamp originale: cp -ps src_file dst_symlink