Modifica degli attributi "Data di creazione" e "Ultima modifica" di un file in un altro file


40

Sto usando Merge Cap per creare un file merge pcap da 15 file. Per il file unito, ho cambiato il nome in quello del primo dei 15 file. Ma vorrei anche cambiare gli attributi del file unito come "Data di creazione" e "Ultima modifica" con quello del primo. C'è un modo per fare questo?

FILES_dcn=($(find  $dir_dcn -maxdepth 1 -type f -name "*.pcap"  -print0 | xargs -0 ls -lt | tail -15 | awk '{print $9}'))
TAG1_dcn=$(basename "${FILES_dcn[14]}" | sed 's/.pcap//')
mergecap -w  "${dir_dcn}"/merge_dcn.pcap "${FILES_dcn[@]}"
mv  "${dir_dcn}"/merge_dcn.pcap  "${dir_dcn}"/"${TAG1_dcn}".pcap

Provo ad accedere ai file uniti su un server samba (Ubuntu). In modo che una funzione di estrazione possa accedere all'estrazione automatica dei file nella cartella D. Ma poiché la data di creazione verrà modificata per il file unito, l'estrazione non riesce. C'è un modo per risolvere questo problema?

Risposte:


77

È possibile utilizzare il touchcomando insieme -rall'opzione per applicare gli attributi di un altro file a un file.

NOTA: Non esiste una data di creazione in Unix, ci sono solo accesso, modifica e modifica. Vedi queste domande e risposte U&L intitolate: ottieni l'età del file specificato per ulteriori dettagli.

$ touch -r goldenfile newfile

Esempio

Ad esempio, ecco un oggetto goldenfilecreato con un timestamp arbitrario.

$ touch -d 20120101 goldenfile
$ ls -l goldenfile 
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Ora faccio alcuni nuovi file:

$ touch newfile
$ ls -l newfile 
-rw-rw-r--. 1 saml saml 0 Mar  7 09:06 newfile

Ora applica goldenfilegli attributi a newfile.

$ touch -r goldenfile newfile 
$ ls -l goldenfile newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Ora newfileha gli stessi attributi.

Modifica tramite Samba

Ho appena confermato che sono in grado di farlo utilizzando il mio laptop Fedora 19 che include la versione 1.16.3-2 collegata a un NAS Thecus N12000 (utilizza una versione modificata di CentOS 5.x).

Sono stato in grado di toccare un file come ho detto sopra e ha funzionato come ho descritto. Il tuo problema è probabilmente un problema con le opzioni di montaggio utilizzate, che potrebbero omettere il monitoraggio di determinati attributi di tempo, o forse è correlato a uno di questi bug:


@JishnuUNair - puoi controllare per vedere come viene montata la condivisione Samba (con quali opzioni)? In genere puoi ottenerli dal mountcomando e quindi cercare la condivisione a cui accedi. Solo un'ipotesi, ma è probabile che sia montato usare gvfs come filesystem FUSE.
slm

1
Molti filesystem ora supportano un tempo di creazione di file. Per ext4, è possibile visualizzarlo / modificarlo debugfs(sebbene ciò abbia bisogno dei privilegi di root e non sia utile qui). Visualizza questa domanda - unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Graeme

@Graeme - sì, avevo appena fatto riferimento a un metodo simile usando stap: unix.stackexchange.com/questions/91197/… nella chatroom.
slm

1
Mentre Linux non supporta i tempi di creazione, una condivisione Samba può. A seconda di come lo configuri (e del supporto xattr nel file system), Samba ha la possibilità di memorizzare alcuni timestamp in xattrs Linux. Ciò significa che potrebbe essere in grado di fare cose che il file system sottostante non può - come riportare un tempo di creazione valido (modificabile). Spiacenti, non ho trovato buoni collegamenti a come funziona.
Peter,

1
Attualmente la maggior parte dei file system Linux (es. Ext4) ora supporta la data di creazione e Linux 4.11 avrà una statx()chiamata per recuperarla. Finalmente.
Jez

36

Il modo più semplice: l'accesso modificato sarà lo stesso:

touch -a -m -t 201512180130.09 fileName.ext

Dove:

-a = accessed
-m = modified
-t  = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Se si desidera utilizzare, NOWrilasciare te il timestamp

Per verificare che siano tutti uguali: stat fileName.ext

Vedi: tocca l'uomo


5
In qualche modo su Ubuntu 14.04 mettere -aprima -mnon modifica il tempo di accesso ... mettilo dopo, quindi:touch -m -a -t....
Jadeye,

5
-d time_stringforse più facile di -t: -d "29-02-2004 16:21:42"
yurenchen
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.