Kann ich Dateien auflisten, die nach dem Datum sortiert sind, das einem Ordner über ein Befehlszeilentool wie ls hinzugefügt wurde?


10

Ich muss ein Skript erstellen, das Dateien in derselben Reihenfolge wie der Standard-Download-Ordner im Dock anzeigt, sortiert nach dem Datum des Hinzufügens, dem neuesten zuerst. Ich kann die Option anscheinend nicht finden ls.

Irgendeine andere Möglichkeit, es zu tun?


Wo anzeigen ?
Rob

Kommandozeile! Am Ende habe ich einen Einzeiler geschrieben, der den Trick macht. Da ich nicht viel Ruf habe, kann ich meine eigene Frage noch nicht beantworten, ich werde es später tun.
Ramiro Araujo

Willkommen auf der Website Ramiro - Sie sollten jederzeit in der Lage sein, Ihre eigene Frage zu beantworten -, aber es gibt eine Einschränkung für Sie, Ihre Antwort als akzeptiert zu markieren. Sie können meine Antwort jederzeit an Ihre Bedürfnisse anpassen oder Ihre eigene Antwort geben, wenn Sie möchten.
bmike

Antworten:


6

Einfachere (schnellere) Lösung:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort

1
Ja, viel besser :)
Ramiro Araujo

Könnte jemand genau beschreiben, was jede dieser Zeilen tut? Kann diese Lösung auch in Terminal als einzelne Befehlszeilen (nacheinander, nacheinander) oder nur innerhalb eines Skripts ausgeführt werden?
EJ Mak

4

Das hinzugefügte Datum wird als Metadatenelement gespeichert, kMDItemDateAddedund der mdlsBefehl macht die Daten für jede Datei verfügbar, die als Argument übergeben wird.

Um das für alle Dateien in Downloads hinzugefügte Datum in einer beliebigen Reihenfolge * zu sichern, die von Ihrer Shell erweitert wird, können Sie:

mdls -name kMDItemDateAdded ~ / Downloads / *

Sie müssen eine Kombination aus find und sed / awk / perl / was auch immer hacken, um einen Ersatz für zu lserstellen, aber vielleicht kann mdfind von Ihrem Skript aufgerufen werden, anstatt lsdiese Ausgabe neu erfinden und analysieren zu müssen.


1
Ja! Ich fand es später und machte einen schönen Einzeiler, der mir viele Dinge beigebracht hat :) Danke für die Hilfe
Ramiro Araujo

2
Fügen Sie diesen einen Liner ein, indem Sie meine Antwort bearbeiten - teilen Sie das Wissen!
bmike

2

Nun, wie üblich, nachdem ich die Frage geschrieben habe, beginne ich nach Metadateninhalten in Dateien zu suchen und schreibe am Ende Folgendes:

ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r

Grundsätzlich gilt Folgendes: 1. Alle Dateien auflisten. 2. Herausfiltern. und .. 3. erhält den Namen und das Datum hinzugefügt, eine Zeile nach der anderen 4. führt alle zwei Zeilen zu einer Zeile zusammen 5. extrahiert Datum, Uhrzeit und Namen 6. sortiert es in umgekehrter Reihenfolge (da datetime im Voraus ist, sortiert es nach Terminzeit)

Hoffe es hilft jemand anderem! :) :)

@bmike Die Website hat mir aufgrund meines mangelnden Rufs die Beschränkung auferlegt, meine eigene Frage erst nach 8 Stunden nach dem Posten meiner Frage zu beantworten: D.


Oh, ich habe den einen Liner nur aus Gründen der Klarheit in mehrere Zeilen aufgeteilt :)
Ramiro Araujo

1
Verwenden Sie ls -Astattdessen, -adamit Sie nicht grep -vfür .und müssen ...
Mfilej

0

Mann ls

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).

1
Nein, ich muss das Datum hinzufügen, nicht das Erstellungsdatum. Entspricht dem Standard-Download-Ordner im Dock
Ramiro Araujo

Wie wird das hinzugefügte Datum nicht mit dem Erstellungsdatum identisch?
Jason

1
Das Erstellungsdatum von Jason ist der Zeitpunkt, zu dem die Datei erstellt wurde. Wenn Safari eine Datei von einem anderen Computer herunterlädt, wurde sie eindeutig für diesen Download erstellt oder könnte Monate oder Jahre vor dem Download erstellt worden sein. Siehe meine Antwort für Details darüber, wo diese Daten unter OS X gespeichert werden.
bmike
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.