In welcher Reihenfolge sind die Daten sortiert nach? Mit Sicherheit keine alphanumerische Reihenfolge.
ls -lt
sortiert nach Änderungszeit. Aber ich brauche Erstellungszeit.
files
ls
timestamps
InquilineKea
quelle
quelle
Antworten:
Die meisten Unices haben keine Vorstellung von der Dateierstellungszeit. Sie können es nicht
ls
drucken, da die Informationen nicht aufgezeichnet werden. Wenn Sie Erstellungszeit benötigen, verwenden Sie ein Versionskontrollsystem : Definieren Sie die Erstellungszeit als Eincheckzeit.Wenn Ihre Unix-Variante eine Erstellungszeit hat, schauen Sie in die Dokumentation. Verwenden Sie beispielsweise unter Mac OS X (das einzige mir bekannte Beispiel¹)
ls -tU
. Windows speichert auch eine Erstellungszeit, ist jedoch nicht immer für Ports von Unix-Dienstprogrammen verfügbar, z. B. hat Cygwinls
keine Option, diese anzuzeigen. Dasstat
Hilfsprogramm kann die Erstellungszeit anzeigen, die in GNU-Hilfsprogrammen als "Geburtszeit" bezeichnet wird, sodass Sie unter Cygwin Dateien anzeigen können, die nach Geburtszeit sortiert sindstat -c '%W %n' * | sort -k1n
.Beachten Sie, dass ctime (
ls -lc
) nicht die Erstellungszeit der Datei ist , sondern die Inode- Änderungszeit. Die Inode-Änderungszeit wird jedes Mal aktualisiert, wenn sich etwas an der Datei ändert (Inhalt oder Metadaten), mit der Ausnahme, dass die ctime nicht aktualisiert wird, wenn die Datei lediglich gelesen wird (auch wenn die atime aktualisiert wird). Insbesondere ist die ctime immer aktueller als die mtime (Änderungszeit des Dateiinhalts), es sei denn, die mtime wurde explizit auf ein Datum in der Zukunft festgelegt.quelle
ls -c
.ls --help
zeigt, was-c
in Kombination mit-l
und funktioniert-lt
.-U
Sortiert nach Erstellungszeit. Unter Solaris 10.x:/usr/bin/ls
Unterstützt nicht-U
,/usr/ucb/ls
unterstützt-U
und sortiert nach Erstellungszeit. Diese Ergebnisse hängen natürlich davon ab, ob das Dateisystem diese Informationen überhaupt speichert.Leider bietet die
stat(2)
API keine Möglichkeit, die Zeit zum Erstellen von Dateien abzurufen, da dies nach den Unix-Standards nicht erforderlich ist .Einige Dateisysteme
ext4
speichern diese Informationen jedoch in den Dateimetadaten. Es gibt einfach keinen Standard-Weg, um es zu bekommen, aber es gibt einen Weg (ext
nur Dateisysteme):Sie würden etwas wie das erwähnen
crtime
( nichtctime
!) Erhalten, wenn Sie verwendenext4
.Es kann einige Zeit dauern, bis dieser Befehl zurückgegeben wird, wahrscheinlich weil er auch alle Bereiche auflistet, die sich auf die Datei beziehen.
Wenn Sie Dateien nach Erstellungsdatum bestellen möchten, ist dies wahrscheinlich nicht einfach (noch nicht richtig) möglich. Wie Gilles sagt, wäre es wahrscheinlich einfacher, wenn Sie ein Revisionskontrollsystem verwenden würden. Aber Sie können versuchen, einen Blick auf die
ext4
API zu werfen ...Ich habe den
stat -c '%w' myfile
Befehl auf einemext4
Dateisystem auf einem (aktuell genug) Ubuntu-System ohne Erfolg ausprobiert (es antwortet nur-
).quelle
f='/path/to/file'; debugfs -R "stat $f" $(df $f|(read a; read a b; echo "$a"))|grep crtime
Hier ist ein Perl-Skript, das die Antwort von Totor verwendet, um das zu erreichen, was Sie wollen (wenn Ihr Dateisystem ext4 ist).
Funktioniert auf meinem Heimcomputer (Ubuntu) und meinem Server (CentOS), aber nicht darüber hinaus getestet, also ymmv.
quelle
Verwenden Sie diesen Befehl
ls -lct
, um Dateien nach Erstellungsdatum zu sortieren.quelle
ctime
ist die Änderungszeit und nicht die Erstellungszeit.