Ich benutze Bash unter Debian GNU/Linux 6.0. Ist es möglich, das Datum/die Uhrzeit der Dateierstellung zu erhalten? Nicht das Änderungsdatum. ls -lh a.txt
und stat -c %y a.txt
geben beide nur die Modifikationszeit an.Wie erhalte ich Dateierstellungsdatum/-uhrzeit in Bash/Debian?
Antwort
Leider wird Ihre Suche in der Regel möglich sein, da es nur 3 verschiedene Zeitwerte für jede Ihrer Dateien gespeichert sind, wie durch den POSIX-Standard (siehe Base Definitions section 4.8 File Times Update)
definiertJede Datei hat drei verschiedene zugehörige Zeitstempel: die Zeit des letzten Datenzugriffs, der Zeitpunkt der letzten Datenänderung und die Zeit, zu der sich die Datei zuletzt geändert hat. Diese Werte werden in der Datei Merkmalsstruktur Strukturstatus zurückgegeben, wie in <sys/stat.h> beschrieben.
BEARBEITEN: Wie in den Kommentaren unten erwähnt, können Metadaten je nach verwendetem Dateisystem Dateierstellungsdatum enthalten. Beachten Sie jedoch, dass das Speichern von Informationen nicht standardmäßig ist. Abhängig davon kann es zu Portabilitätsproblemen kommen, die in ein anderes Dateisystem verschoben werden, falls das tatsächlich verwendete irgendwie irgendwie speichert.
danke für die referenz. – NoodleFolk
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html –
Solche traurige Nachrichten. Es wäre jetzt so nützlich, einfach zu bestimmen, ob eine Datei gelöscht und neu erstellt wurde oder schon die ganze Zeit da war. – froggythefrog
Erstellungsdatum/-uhrzeit ist normalerweise nicht gespeichert. Also nein, das kannst du nicht.
Beachten Sie, dass wenn Sie Ihr Dateisystem aus Leistungsgründen mit Notime eingehängt haben, dann zeigt der Atime wahrscheinlich die Erstellungszeit. Angesichts der Tatsache, dass Noatime zu einem massiven Leistungsschub führt (durch Entfernen einer Festplattenschreiboperation für jedes Mal, wenn eine Datei gelesen wird), kann es eine sinnvolle Konfigurationsoption sein, die auch die gewünschten Ergebnisse liefert.
Ich kann nicht für den Leistungsschub bürgen, aber ich lese eine Anleitung für SSDs, die Noatime empfohlen, so dass dies für mich funktionierte. – jake
mikyras Antwort ist gut.Die Tatsache genau wie was er sagte.
[[email protected] test]$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 8 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 588720 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 500/ jason) Gid: ( 500/ jason)
Access: 2013-03-14 01:58:12.000000000 -0700
Modify: 2013-03-14 01:58:12.000000000 -0700
Change: 2013-03-14 01:58:12.000000000 -0700
wenn Sie wollen Wich-Datei erstellt wurde zuerst überprüfen, können Sie Ihre Dateinamen Datum durch Anhängen System strukturieren, wenn Sie eine Reihe von Dateien erstellen.
Wenn ich Stat Myfile.txt mache, bekomme ich eine andere Zeile: Geburt. Leider hat es keinen Wert. Warum ist diese Reihe da? – allyourcode
ls -i menus.xml
94490 menus.xml Hier wird die Anzahl 94.490 repräsentiert inode
tun dann ein:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-root 4.0G 3.4G 408M 90%/
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 124M 27M 92M 23% /boot
/dev/mapper/vg-var 7.9G 1.1G 6.5G 15% /var
das finden Montagepunkt des Root "/" Dateisystem, weil die Datei Menüs.XML ist auf '/', die '/ dev/Mapper/vg-root'
debugfs -R 'stat < 94.490>'/dev/Mapper/vg-root
die Ausgabe wie derjenige sein kann, unten:
debugfs -R 'stat < 94.490>'/dev/mapper/vg-root
debugfs 1.41.12 (17-May-2010)
Inode: 94490 Type: regular Mode: 0644 Flags: 0x0
Generation: 2826123170 Version: 0x00000000
User: 0 Group: 0 Size: 4441
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
atime: 0x5266e47b -- Wed Oct 23 09:47:55 2013
mtime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
Size of extra inode fields: 4
Extended attributes stored in inode body:
selinux = "unconfined_u:object_r:usr_t:s0\000" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2
Wo Sie die Erstellungszeit sehen können:
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
ctime ist nicht die Erstellungszeit, es ist die "Zeit der letzten Änderung der Datei Statusinformationen" – mokalan
ctime = "Zeit ändern", wo Änderung bedeutet Änderung der Besitzer, Gruppe, Privilegien oder ein anderes Attribut. Es ist nicht unbedingt die Erstellungszeit. – ingyhere
es ist ctime und nicht ctime .. aber danke! – Zibri
ls -i file #output is for me 68551981
debugfs -R 'stat <68551981>' /dev/sda3 # /dev/sda3 is the disk on which the file exists
#results - crtime value
[[email protected] ~]# debugfs -R 'stat <68551981>' /dev/sda3
debugfs 1.41.12 (17-May-2010)
Inode: 68551981 Type: regular Mode: 0644 Flags: 0x80000
Generation: 769802755 Version: 0x00000000:00000001
User: 0 Group: 0 Size: 38973440
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 76128
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
atime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013
mtime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
**crtime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013**
Size of extra inode fields: 28
EXTENTS:
(0-511): 352633728-352634239, (512-1023): 352634368-352634879, (1024-2047): 288392192-288393215, (2048-4095): 355803136-355805183, (4096-6143): 357941248-357943295, (6144
-9514): 357961728-357965098
Was bedeutet ctime, atime und mtime? –
@Velthune Erstellungszeit, Zugriffszeit, Änderungszeit. Abhängig von der Art und Weise, wie das Dateisystem konfiguriert ist, können diese Werte jedoch korrekt sein oder nicht. Zum Beispiel deaktivieren viele Leute das Schreiben der letzten Zugriffszeit auf Dateien, um auf den zusätzlichen Plattenschreibvorgängen zu sparen. – indivisible
@indivisible: FALSCH! POSIX-Standards definieren ctime als Änderungszeitpunkt. Dies ist der Fall, wenn sich einige Dateiattribute ändern. – ingyhere
Wie @mikyra erklärt, wird die Erstellungsdatumszeit nirgendwo gespeichert.
Alle oben genannten Methoden sind schön, aber wenn man schnell nur letzte Änderungsdatum erhalten möchten, können Sie Folgendes eingeben:
ls -lit /path
mit -t Option listen Sie alle Dateien in/Pfad von im letzten odered Datum ändern
Wenn Sie das wirklich erreichen möchten, können Sie einen Dateiwatcher wie inotifywait verwenden.
Sie überwachen ein Verzeichnis und speichern Informationen über Dateierstellung in einer separaten Datei außerhalb dieses Verzeichnisses.
while true; do
change=$(inotifywait -e close_write,moved_to,create .)
change=${change#./ * }
if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done
Da keine Erstellungszeit gespeichert ist, können Sie Ihr eigenes System basierend auf inotify erstellen.
können Sie die Erstellungszeit finden - auch bekannt als Geburtszeit - mit stat und passen auch finden Verwendung.
Wir haben diese Dateien Letzte Änderung der Zeit zeigt:
$ ls -l --time-style=long-iso | sort -k6
total 692
-rwxrwx---+ 1 XXXX XXXX 249159 2013-05-31 14:47 Getting Started.pdf
-rwxrwx---+ 1 XXXX XXXX 275799 2013-12-30 21:12 TheScienceofGettingRich.pdf
-rwxrwx---+ 1 XXXX XXXX 25600 2015-05-07 18:52 Thumbs.db
-rwxrwx---+ 1 XXXX XXXX 148051 2015-05-07 18:55 AsAManThinketh.pdf
Dateien innerhalb eines bestimmten Zeitrahmens erstellt Um als unten verwenden.
ist klar, das Dateisystem kennt die Geburtszeit einer Datei:
$ find -newerBt '2014-06-13' ! -newerBt '2014-06-13 12:16:10' -ls
20547673299906851 148 -rwxrwx--- 1 XXXX XXXX 148051 May 7 18:55 ./AsAManThinketh.pdf
1407374883582246 244 -rwxrwx--- 1 XXXX XXXX 249159 May 31 2013 ./Getting\ Started.pdf
Wir können dies mit stat bestätigen:
$ stat -c "%w %n" * | sort
2014-06-13 12:16:03.873778400 +0100 AsAManThinketh.pdf
2014-06-13 12:16:04.006872500 +0100 Getting Started.pdf
2014-06-13 12:16:29.607075500 +0100 TheScienceofGettingRich.pdf
2015-05-07 18:32:26.938446200 +0100 Thumbs.db
stat Mann Seiten erklärt% w:
%w time of file birth, human-readable; - if unknown
Zitiert von https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/131347#131347, die folgende sie llscript funktionieren würde, Erstellungszeit erhalten:
get_crtime() {
for target in "${@}"; do
inode=$(stat -c %i "${target}")
fs=$(df "${target}" | tail -1 | awk '{print $1}')
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
noch besser:
lsct()
{
debugfs -R 'stat <'`ls -i "$1" | (read a b;echo -n $a)`'>' `df "$1" | (read a; read a b; echo "$a")` 2> /dev/null | grep --color=auto crtime | (read a b c d;
echo $d)
}
LSCT/etc
Mitt Jul 20 19:25:48 2016
Sie ein Dateisystem verwenden, die Erstellungszeit der Datensätze? Die meisten nicht. –
Siehe http://askubuntu.com/questions/470134/how-to-find-the-creation-time-of-a-file –