Kann ich Dateien nach Datum sortiert auflisten, die einem Ordner von einem Befehlszeilentool wie ls hinzugefügt wurden?

Ich muss ein Skript erstellen, das Dateien in der gleichen Reihenfolge wie der Standard-Download-Ordner im Dock anzeigt, geordnet nach Datum hinzugefügt, neueste zuerst. Ich kann die Option in nicht finden ls.

Irgendeine andere Möglichkeit, es zu tun?

Wo anzeigen ?
Befehlszeile!.Verstanden! Am Ende habe ich einen Einzeiler geschrieben, der den Zweck erfüllt. Da ich nicht viel Ansehen habe, kann ich meine eigene Frage noch nicht beantworten, ich werde es später tun.
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". Fühlen Sie sich frei, meine Antwort an Ihre Bedürfnisse anzupassen oder geben Sie Ihre eigene Antwort ein, wenn Sie möchten.

Antworten (3)

Einfachere (schnellere) Lösung:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
ja viel besser :)
Könnte jemand genau beschreiben, was jede dieser Zeilen tut? Kann diese Lösung auch in Terminal als einzelne Befehlszeilen (nacheinander) oder nur innerhalb eines Skripts ausgeführt werden?
Zeile 1: mdls ist das Metadatenlisten-Tool von Mac. Geben Sie man mdls für die Dokumentation ein. Dies funktioniert nicht in anderen Linux-Notfällen. Es gibt viele Metadatenschlüssel. Die -name-Flags wählen nur die beiden gewünschten aus, den Dateinamen und das hinzugefügte Datum. Das Flag -raw trennt die zurückgegebenen Werte mit einem Nullzeichen. Der Stern listet alle Dateien auf. Sie ersetzen das Verzeichnis und alle anderen gewünschten Glob-Filter. Die Pipe gibt zum nächsten Befehl aus. IOW dies ist ein einzelner Befehl. Sie können dies tatsächlich interaktiv im Terminal tun. Wenn Sie sie einzeln ausführen möchten, können Sie jeden Schritt in eine Datei ausgeben.
Zeile 2: Manchmal platzieren die Pipes die Ausgabe nicht dort, wo der nächste Befehl das Argument benötigt. Das Flag -0 besagt, dass die Eingabe aus der vorherigen Pipe durch ein Nullzeichen begrenzt ist. Das Flag -I setzt eine Ersetzungszeichenfolge. Die Klammern sind eine Konvention. Sie können jedes Zeichen verwenden, das Sie nicht in der Eingabe erwarten. Ich neige dazu, ein Prozentzeichen zu verwenden. In diesem Fall führt xargs den echo-Befehl für jede Ausgabe der vorherigen Pipe aus und platziert ihn dort, wo sich die Ersatzzeichenfolge „{}“ befindet. Dann wird das an den nächsten Befehl weitergeleitet.
Zeile 3: Dies ist der Stream-Editor, sed. Das sed-Tool bearbeitet Text und macht die üblichen Dinge, die Sie mit Strings erwarten würden, aber es hat seine eigenen syntaktischen Aromen. Schauen Sie nach oben, um mehr zu sehen. Hier gibt es zwei Befehle, N und s, was Next und Substitut bedeutet. Jose hat hier N ausgewählt, weil wir zwei Metadatenschlüssel gleichzeitig erhalten. Für jede Eingabe sagen wir, okay, ich habe eine. Bevor Sie irgendetwas tun, besorgen Sie sich auch ein anderes. Führen Sie nun den Befehl s aus. Hier sagen wir für jedes Zeilenumbruchzeichen ein Leerzeichen ersetzen. Leiten Sie diese Ergebnisse dann an das nächste Tool weiter.
Zeile 4: Selbsterklärend. Ich füge der Sortierung das Flag -r hinzu, um eine umgekehrte Reihenfolge zu erhalten. Ich möchte die zuletzt hinzugefügten Dateien wissen. Dann leite ich es zum Kopfwerkzeug für die oberen. Als nächstes erstelle ich einen Alias, damit ich das einfach wiederholen kann.
Dies funktioniert, ist aber ziemlich langsam, selbst wenn es nicht viele Dateien im aktuellen Verzeichnis gibt. Wie auch immer, um das zu beschleunigen?

Das hinzugefügte Datum wird als Metadatenelement gespeichert kMDItemDateAddedund der mdlsBefehl legt die Daten für jede Datei offen, die ihm als Argument übergeben wird.

Um also das Datum, das für alle Dateien in Downloads in beliebiger Reihenfolge hinzugefügt wurde, auszugeben, * wird von Ihrer Shell erweitert, können Sie:

mdls -name kMDItemDateAdded ~/Downloads/*

Sie müssen eine Kombination aus find und sed/awk/perl/whatever zusammenhacken, um einen Ersatz dafür zusammenzustellen ls, aber vielleicht kann mdfind von Ihrem Skript aufgerufen werden, anstatt lsdiese Ausgabe neu erfinden und parsen zu müssen.

Ja! Ich habe es später gefunden und einen schönen Einzeiler gemacht, der mir viele Dinge beigebracht hat :) Danke für die Hilfe
Fügen Sie diesen einen Liner ein, indem Sie meine Antwort bearbeiten - teilen Sie das Wissen!

Nun, wie üblich, nachdem ich die Frage geschrieben habe, fange ich an, nach Metadateninhalten in Dateien zu suchen, und schreibe schließlich 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: 1. alle Dateien auflisten 2. herausfiltern . und .. 3. bekommt den Namen und das Datum hinzugefügt, eine Zeile nach der anderen 4. fügt alle zwei Zeilen zu einer Zeile zusammen 5. extrahiert das Datum, die Uhrzeit und den Namen 6. sortiert es umgekehrt (da datetime im Vordergrund steht, wird sortiert nach Terminzeit)

Hoffe es hilft jemand anderem! :)

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

oh, ich habe den einen Liner nur zur Verdeutlichung in mehrere Zeilen aufgeteilt :)
Verwenden Sie ls -Aanstelle von -a, damit Sie nicht grep -vfür .und ...