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.
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.
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 ).
Jeder Datei sind drei unterschiedliche Zeitstempel zugeordnet: der Zeitpunkt des letzten Datenzugriffs, der Zeitpunkt der letzten Datenänderung und der Zeitpunkt, zu dem sich der Dateistatus zuletzt geändert hat. Diese Werte werden in der Strukturstruktur stat der Dateieigenschaften zurückgegeben , wie in <sys / stat.h> beschrieben .
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.
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
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.
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.
Erstellungsdatum / -zeit wird normalerweise nicht gespeichert. Also nein, das kannst du nicht.
94490 menus.xml Hier steht die Nummer 94490 für Inode
Dann mache ein:
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
So finden Sie den Einhängepunkt des Root-Dateisystems "/", da sich die Datei menus.xml auf '/' befindet, dh '/ dev / mapper / vg-root'
Die Ausgabe kann wie folgt aussehen:
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
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:
$ 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
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
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:
ls -lit /path
Mit der Option -t listen Sie alle Dateien in / path auf, die nach dem Datum der letzten Änderung geordnet sind.
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.
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
}
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>>