Devo creare uno script che mostri i file nello stesso ordine della cartella Download predefinita nel dock, ordinata per Data aggiunta, prima il più recente. Non riesco a trovare l'opzione in ls
.
Qualche altro modo per farlo?
Devo creare uno script che mostri i file nello stesso ordine della cartella Download predefinita nel dock, ordinata per Data aggiunta, prima il più recente. Non riesco a trovare l'opzione in ls
.
Qualche altro modo per farlo?
Risposte:
Soluzione più semplice (più veloce):
mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
La data aggiunta viene memorizzata come elemento di metadati kMDItemDateAdded
e il mdls
comando esporrà i dati per ciascun file passato come argomento.
Quindi, per scaricare la data aggiunta per tutti i file in Download in qualunque ordine arbitrario * venga espanso dalla shell, è possibile:
mdls -name kMDItemDateAdded ~ / Downloads / *
Dovrai hackerare insieme una combinazione di find e sed / awk / perl / qualunque cosa per assemblare un rimpiazzo ls
ma forse mdfind può essere chiamato dal tuo script piuttosto che dover reinventare ls
e analizzare quell'output .
Bene, come al solito, dopo aver scritto la domanda, comincio a scavare per il contenuto di metadati nei file e ho finito per scrivere questo:
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
Fondamentalmente: 1. elenca tutti i file 2. filtra. e .. 3. ottiene il nome e la data aggiunti, una riga dopo l'altra 4. unisce ogni due righe in 1 riga 5. estrae la data, l'ora e il nome 6. ordina in ordine inverso (poiché datetime è in anticipo, ordina per appuntamento)
Spero che aiuti qualcun altro! :)
@bmike in realtà, il sito mi ha imposto una limitazione per rispondere alla mia domanda solo dopo 8 ore dalla pubblicazione della mia domanda, a causa della mia mancanza di reputazione: D
ls -A
invece di -a
così non devi grep -v
per .
e ..
.
uomo ls
-U Use time of file creation, instead of last modification for sorting (-t) or long output (-l).