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?
Einfachere (schnellere) Lösung:
mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Das hinzugefügte Datum wird als Metadatenelement gespeichert kMDItemDateAdded
und der mdls
Befehl 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 ls
diese Ausgabe neu erfinden und parsen zu müssen.
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
ls -A
anstelle von -a
, damit Sie nicht grep -v
für .
und ..
.
rauben
Ramiro Araujo
Fahrrad