Ich verwende Bash unter Debian GNU / Linux 6.0. Ist es möglich, das Datum / die Uhrzeit der Dateierstellung abzurufen? Nicht das Änderungsdatum / die Änderungszeit.
ls -lh a.txt
und stat -c %y a.txt
beide geben nur die Änderungszeit an.
74
Antworten:
Leider ist Ihre Suche im Allgemeinen nicht möglich, da für jede Ihrer Dateien nur 3 unterschiedliche Zeitwerte gespeichert sind, wie im POSIX-Standard definiert (siehe Basisdefinitionen, Abschnitt 4.8, Aktualisierung der Dateizeiten ).
BEARBEITEN: Wie in den Kommentaren unten erwähnt, können Metadaten je nach verwendetem Dateisystem das Erstellungsdatum der Datei enthalten. Beachten Sie jedoch, dass die Speicherung solcher Informationen nicht Standard ist. Abhängig davon kann es zu Portabilitätsproblemen beim Wechsel in ein anderes Dateisystem kommen, falls das tatsächlich verwendete es irgendwie speichert.
quelle
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 [root@loft9156 ~]# 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
quelle
Mikyras Antwort ist gut. Die Tatsache genau wie das, was er gesagt hat.
[jason@rh5 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 überprüfen möchten, welche Datei zuerst erstellt wurde, können Sie Ihren Dateinamen strukturieren, indem Sie beim Erstellen einer Reihe von Dateien das Systemdatum anhängen.
quelle
Beachten Sie, dass, wenn Sie Ihr Dateisystem aus Leistungsgründen mit noatime gemountet haben, der atime wahrscheinlich die Erstellungszeit anzeigt. Angesichts der Tatsache, dass noatime zu einer massiven Leistungssteigerung führt (indem bei jedem Lesen einer Datei ein Schreibvorgang entfernt wird), ist dies möglicherweise eine sinnvolle Konfigurationsoption, mit der Sie auch die gewünschten Ergebnisse erzielen.
quelle
Erstellungsdatum / -zeit wird normalerweise nicht gespeichert. Also nein, das kannst du nicht.
quelle
ls -i menus.xml
94490 menus.xml Hier steht die Nummer 94490 für Inode
Dann mache ein:
df -h
So finden Sie den Einhängepunkt des Root-Dateisystems "/", da sich die Datei menus.xml auf '/' befindet, dh '/ dev / mapper / vg-root'
debugfs -R 'stat <94490>' / dev / mapper / vg-root
Die Ausgabe kann wie folgt aussehen:
debugfs -R 'stat <94490>' / 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:
quelle
Sie können die Erstellungszeit - auch als Geburtszeit bezeichnet - mit stat ermitteln und mit find abgleichen .
Wir haben diese Dateien, die die letzte Änderungszeit anzeigen:
Um Dateien zu finden, die innerhalb eines bestimmten Zeitraums erstellt wurden, verwenden Sie find wie folgt.
Das Dateisystem kennt eindeutig 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 man pages erklärt% w:
%w time of file birth, human-readable; - if unknown
quelle
ls -l
Anzeigen Zeit$ /usr/bin/find -newerBt '2014-06-13' /usr/bin/find: This system does not provide a way to find the birth time of a file. /usr/bin/find: invalid predicate
-newerBt'`Wie @mikyra erklärte, wird die Erstellungsdatum-Zeit nirgendwo gespeichert.
Alle oben genannten Methoden sind nett, aber wenn Sie schnell nur das Datum der letzten Änderung erhalten möchten, können Sie Folgendes eingeben:
Mit der Option -t listen Sie alle Dateien in / path auf, die nach dem Datum der letzten Änderung geordnet sind.
quelle
Wenn Sie dies wirklich erreichen möchten, können Sie einen Datei-Watcher wie inotifywait verwenden .
Sie sehen sich ein Verzeichnis an und speichern Informationen zu Dateierstellungen 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.
quelle
Unter /unix/50177/birth-is-empty-on-ext4/131347#131347 wird das folgende Shellscript verwendet, um die Erstellungszeit zu 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 }
quelle
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.
Mi 20. Juli 19:25:48 2016
quelle
Ein weiterer Trick, den Sie Ihrem Arsenal hinzufügen können, ist der folgende:
$ grep -r "Copyright" /<path-to-source-files>/src
Wenn man eine Datei ändert, sollte man im Allgemeinen eine Gutschrift im „Copyright“ beantragen. Untersuchen Sie die Ergebnisse auf Daten, Dateinamen, Mitwirkende und Kontakt-E-Mails.
Beispiel grep Ergebnis:
/<path>/src/someobject.h: * Copyright 2007-2012 <creator's name> <creator's email>(at)<some URL>>
quelle