Ich habe den Namen einer Datei vergessen, die sich in einem Verzeichnis oder einem seiner Unterverzeichnisse befindet. Ich erinnere mich an die Dateierweiterung (.nb) und weiß ungefähr, wann sie erstellt wurde. Wie kann ich alle Dateien mit dieser Erweiterung im aktuellen Verzeichnis und den Unterverzeichnissen zusammen mit ihrem Erstellungsdatum auflisten? Ich verwende Mac OS X.
Antwort1
Der einfachste Weg dies zu tun ist mitzsh, das standardmäßig auf macOS installiert ist. SeineGlob-Qualifikationermöglicht Ihnen das Auswählen und Sortieren von Dateien nach Zeitstempel und anderen Metadaten. Zsh unterstützt keine Erstellungszeiten, aber Änderungszeiten und Inode-Änderungszeiten; eine davon stimmt wahrscheinlich mit der Erstellungszeit überein.
Dies listet die 100 ( [1,100]
) aktuellsten ( om
) regulären ( .
) Dateien mit der .nb
Erweiterung im aktuellen Verzeichnis und seinen Unterverzeichnissen ( **/
) auf:
zsh -c 'ls -ltr **/*.nb(.om[1,100])'
Hier werden Dateien aufgelistet, die vor 7 bis 14 Tagen geändert wurden:
zsh -c 'ls -ltr **/*.nb(.m+6m-14)'
Antwort2
Dies sollte Ihr gewünschtes Ergebnis erzielen.
find . -type f -name '*.nb'|xargs stat -f '%c %N'|sort
Erläuterung
find . -type f -name '*.nb'
Finde alle Dateien mit der Erweiterung .nb.
xargs stat -f '%c %N'
Drucken Sie die Dateien mit dem Unix-Zeitstempel vorne aus.
sort
ordne es.
Antwort3
Für Bash (nicht Mac):
find . -type f -iname '*.nb'| xargs -d '\n' stat -c '%z %N'|sort
Suche alle Einträge vom Typ „Datei“ im aktuellen Verzeichnis und darunter, die dem Muster entsprechen
(-iname, um Groß- und Kleinschreibung zu ignorieren)
Leite es an xargs weiter
(-d '\n' ändert das Trennzeichen in einen Zeilenvorschub, um Leerzeichen in Dateinamen zuzulassen)
dann zu stat
(-c für Ausgabeformat %z = letzte Statusänderung %N Dateiname in Anführungszeichen)
und sortieren Sie die Ausgabe
Antwort4
find -name '*.nb' -exec ls -rtl {} +
Zeigt detaillierte Informationen zu allen Dateien an, die dem Muster entsprechen, und sortiert sie von der ältesten zur neuesten (Sie können von der neuesten zur ältesten gelangen, indem Sie die r
Option aus dem ls
Befehl entfernen).
„Am +
Ende“ bedeutet, dass Sie den Befehl am Ende der Suche ausführen, anstatt ihn für jede Übereinstimmung auszuführen.
NOTIZ: dies funktioniert nur mit einer angemessenen Anzahl von Übereinstimmungen. Wenn die Befehlszeile zu lang ist, ls
wird sie in mehrere 's aufgeteilt ls
, was zu mehreren sortierten Teilmengen führt, während die gesamte Liste nicht richtig sortiert wird (danke @Gilles und @rudimeier für den Hinweis).