Ändern der Attribute "Erstellungsdatum" und "Zuletzt geändert" einer Datei in die einer anderen Datei

40

Ich verwende Merge Cap, um eine Merge-PCAP-Datei aus 15 Dateien zu erstellen. Für die zusammengeführte Datei habe ich den Namen der ersten der 15 Dateien geändert. Ich möchte aber auch die Attribute der zusammengeführten Datei wie "Erstellungsdatum" und "Zuletzt geändert" in die des ersten ändern. Gibt es sowieso das zu tun?

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

Ich versuche, über einen Samba-Server (Ubuntu) auf die zusammengeführten Dateien zuzugreifen. Damit eine Extraktionsfunktion automatisch auf die Dateien zugreifen kann, die in Ordner D extrahiert werden. Da jedoch das Erstellungsdatum für die zusammengeführte Datei geändert wird, schlägt die Extraktion fehl. Gibt es sowieso, um das zu beheben?

Jishnu U Nair
quelle

Antworten:

77

Sie können den touchBefehl zusammen mit dem -rSchalter verwenden, um die Attribute einer anderen Datei auf eine Datei anzuwenden.

HINWEIS: In Unix gibt es kein Erstellungsdatum, sondern nur Zugriff, Änderung und Änderung. Weitere Informationen finden Sie in dieser U & L-Frage & Antwort mit dem Titel: Alter der angegebenen Datei abrufen.

$ touch -r goldenfile newfile

Beispiel

Hier ist zum Beispiel eine goldenfile, die mit einem beliebigen Zeitstempel erstellt wurde.

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

Jetzt mache ich eine neue Datei:

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

Wenden Sie nun die goldenfileAttribute auf an 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

Hat jetzt newfiledie gleichen Attribute.

Ändern Sie über Samba

Ich habe gerade bestätigt, dass ich dies mit meinem Fedora 19-Laptop tun kann, der die Version 1.16.3-2 enthält, die mit einem Thecus N12000 NAS verbunden ist (verwendet eine modifizierte Version von CentOS 5.x).

Ich konnte eine Datei wie oben erwähnt anfassen und sie funktionierte wie beschrieben. Ihr Problem ist wahrscheinlich ein Problem mit den verwendeten Einhängeoptionen, bei denen möglicherweise bestimmte Zeitattribute nicht erfasst werden, oder möglicherweise mit einem der folgenden Fehler:

slm
quelle
@JishnuUNair - können Sie überprüfen, wie die Samba-Freigabe gemountet wird (mit welchen Optionen)? Sie können diese normalerweise über den mountBefehl abrufen und dann nach der Freigabe suchen, auf die Sie zugreifen. Nur eine Vermutung, aber es wird wahrscheinlich gemountet. Verwenden Sie gvfs als FUSE-Dateisystem.
slm
1
Viele Dateisysteme unterstützen jetzt eine Dateierstellungszeit. Für ext4 können Sie es anzeigen / ändern debugfs(obwohl dies Root-Rechte erfordert und hier keine Verwendung findet). Siehe diese Frage - unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Graeme
@Graeme - ja, ich habe gerade mit stap auf eine ähnliche Methode verwiesen: unix.stackexchange.com/questions/91197/… im Chatroom.
slm
1
Während Linux keine Erstellungszeit unterstützt, kann eine Samba-Freigabe. Abhängig davon, wie Sie es eingerichtet haben (und wie xattr im Dateisystem unterstützt wird), kann Samba einige Zeitstempel in Linux-xattrs speichern. Das bedeutet, dass es möglicherweise in der Lage ist, Dinge zu tun, die das zugrunde liegende Dateisystem nicht kann - wie das Melden einer gültigen (änderbaren) Erstellungszeit. Entschuldigung, ich habe keine guten Links gefunden, wie das funktioniert.
Peter
1
Tatsächlich unterstützen die meisten Linux-Dateisysteme (z. B. ext4) jetzt das Erstellungsdatum, und Linux 4.11 wird einen statx()Aufruf zum Abrufen haben. Endlich.
Jez
36

Der einfachste Weg - auf den modifiziert zugegriffen wird, ist derselbe:

touch -a -m -t 201512180130.09 fileName.ext

Woher:

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

Wenn Sie verwenden möchten, lassen Sie NOWeinfach den tund den Zeitstempel fallen

So überprüfen Sie, ob alle gleich sind: stat fileName.ext

Siehe: Mensch berühren

Jadeye
quelle
5
Irgendwie auf Ubuntu 14.04 setzen , -abevor die -mZugriffszeit nicht ändern ... setzen sie nach, so:touch -m -a -t....
Jadeye
5
-d time_stringvielleicht einfacher als -t: -d "2004-02-29 16:21:42"
yurenchen