Wie kann ich die Liste aller Dateien im aktuellen Verzeichnis zusammen mit ihrem Änderungsdatum abrufen und nach diesem Datum sortieren?
Jetzt weiß ich , wie das zu erreichen , mit find
, stat
und sort
, aber aus irgendeinem seltsamen Grunde , die stat
nicht auf der Box installiert und es ist unwahrscheinlich , dass ich bekommen kann es installiert ist .
Irgendeine andere Option?
PS: gcc
ist auch nicht installiert
find
-printf
Aktion scheint jedoch die einfachste zu sein.Antworten:
Meine kürzeste Methode verwendet zsh:
(
D
Fügen Sie die Glob-Qualifizierer hinzu, wenn Sie auch die versteckten Dateien oder die Dateien in versteckten Verzeichnissen auflisten möchten).Wenn Sie GNU find haben, lassen Sie es die Datei-Änderungszeiten drucken und danach sortieren. Ich gehe davon aus, dass die Dateinamen keine Zeilenumbrüche enthalten.
Wenn Sie Perl haben (auch hier unter der Annahme, dass die Dateinamen keine Zeilenumbrüche enthalten):
Wenn Sie Python haben (auch hier unter der Annahme, dass die Dateinamen keine Zeilenumbrüche enthalten):
Wenn Sie über SSH-Zugriff auf diesen Server verfügen, hängen Sie das Verzeichnis über sshfs auf einem besser ausgestatteten Computer an:
Mit nur POSIX-Werkzeugen ist es viel komplizierter, da es keine gute Möglichkeit gibt, den Änderungszeitpunkt einer Datei zu ermitteln. Die einzige Standardmethode zum Abrufen der Zeiten einer Datei ist
ls
, und das Ausgabeformat ist vom Gebietsschema abhängig und schwer zu analysieren.Wenn Sie in die Dateien schreiben können und sich nur für reguläre Dateien interessieren und es keine neuen Zeilen in den Dateinamen gibt, ist dies ein schrecklicher Fehler: Erstellen Sie feste Links zu allen Dateien in einem einzigen Verzeichnis und sortieren Sie sie nach dem Änderungszeitpunkt.
quelle
find . -print | xargs -n99999 -s999999 ls -ltr
. Dies hat jedoch das Problem, dass (1)xargs
möglicherweise nicht-m
mehr als 512 oder-s
mehr als 5120 zulässt , und (b) selbst wenn Sie das umgehen können, gibt es immer noch eine vom Kernel festgelegte maximale Größe der kombinierten Argumentliste und -umgebung. Die meisten Ihrer Ideen (außer den Perl- und Python-Ideen) haben das gleiche Problem, weshalb ich ausdrücklich darauf verzichtet habe, lange Befehlszeilen zu erstellen.zsh
ich im allgemeinen Fall regelmäßig "Argumentliste zu lang" -Fehler mit rekursiven Globs.print -rl **/*
die einzige Beschränkung besteht darin, wie viel Speicher Sie haben), und darüber hinaus gibt es noch weitere Funktionenzargs
. Ihr Vorschlag vonfind … | xargs … ls
wird korrekt sortiert, wennxargs
erls
nur einmal aufgerufen wird , und funktioniert nicht, wenn die Dateinamen Sonderzeichen enthalten.Angenommen, GNU
find
:Wechseln Sie
1n,1
zu,1nr,1
wenn Sie möchten, dass die neuesten Dateien zuerst aufgelistet werden.Wenn Sie GNU nicht haben
find
, wird es schwieriger, weills
das Zeitstempelformat so stark variiert (kürzlich geänderte Dateien haben zum Beispiel einen anderen Zeitstempelstil).quelle
ls --time-style="..."
- ich bin mir nicht sicher, ob dies Standard oder GNU ls ist, wahrscheinlich GNU.ls
hat diese option nicht.Auf einem Mac muss kein -printf-Argument gefunden werden, aber Sie können dies stattdessen tun:
find . -print0 | xargs -0 -n 100 stat -f"%m %Sm %N" | sort -n|awk '{$1="";print}'
quelle
man kann das probieren (man muss es sich aber selber bauen) https://github.com/shadkam/recentmost
quelle
Versteckte Dateien ignorieren - mit schönem und schnellem Zeitstempel
Behandelt Leerzeichen in Dateinamen gut - nicht, dass Sie diese verwenden sollten!
Weitere
find
Informationen finden Sie unter folgendem Link.quelle
Apropos Dateien nach Datum zu finden (das funktioniert nicht für das Originalposter, aber ich bin hier gelandet, also dachte ich, andere könnten es auch). In meinem Anwendungsfall möchte ich die Dateien auflisten, um sie vor dem Löschen zu überprüfen.
Mit findutils 4.6.0 mag ich:
Mit dem obigen Befehl werden Dateien (
-type f
) im aktuellen Arbeitsverzeichnis (.
) gefunden, die vor mehr als 270 Tagen geändert wurden (-mtime +270
Außerdem-mtime 0
werden die letzten 24 Stunden erstellt und-mtime -5
die letzten 5 Tage angezeigt). Es verwendet dannls
sie zur Liste nach Datum, neueste zuerst (-exec ls -laFGht --time-style=iso {} \+
)Hier ist ein Beispiel für die Ausgabe:
Das Tolle daran ist, dass es einfach ist, den
find
Listenteil durch den Befehl delete zu ersetzen, sobald die Liste überprüft wurde :quelle