Posso elencare i file ordinati per data aggiunta in una cartella da uno strumento da riga di comando come ls?


10

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?


Visualizzarlo dove ?
Rob,

Riga di comando! Ho finito per scrivere una copertina che fa il trucco. Dal momento che non ho molta reputazione, non posso ancora rispondere alla mia domanda, lo farò più tardi.
Ramiro Araujo,

Benvenuto nel sito Ramiro - dovresti essere in grado di rispondere alla tua domanda in qualsiasi momento - ma ci sarà una restrizione per "contrassegnare come accettata" la tua risposta. Sentiti libero di modificare la mia risposta in base alle tue esigenze o di fornire la tua risposta se / quando vuoi.
bmike

Risposte:


6

Soluzione più semplice (più veloce):

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

1
sì, molto meglio :)
Ramiro Araujo,

Qualcuno potrebbe dettagliare cosa fanno ognuna di quelle righe? Inoltre, questa soluzione può essere eseguita in Terminale come singole righe di comando (in sequenza, una dopo l'altra) o solo all'interno di uno script?
EJ Mak

4

La data aggiunta viene memorizzata come elemento di metadati kMDItemDateAddede il mdlscomando 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 lsma forse mdfind può essere chiamato dal tuo script piuttosto che dover reinventare lse analizzare quell'output .


1
Sì! L'ho trovato più tardi e ne ho creato uno bellissimo che mi ha insegnato molte cose :) Grazie per l'aiuto
Ramiro Araujo

2
Incolla quell'unica riga modificando la mia risposta: condividi le tue conoscenze!
bmike

2

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


oh, ho diviso il liner in più righe solo per chiarezza :)
Ramiro Araujo

1
Usa ls -Ainvece di -acosì non devi grep -vper .e ...
mfilej,

0

uomo ls

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

1
no, ho bisogno della data aggiunta, non della data di creazione. Come la cartella dei download predefinita nel dock
Ramiro Araujo

in che modo la data aggiunta non coincide con la data di creazione?
Jason,

1
Jason - la data di creazione è quando il file è stato creato, quindi quando Safari scarica un file da un altro computer, è stato chiaramente creato per quel download o potrebbe essere stato creato mesi o anni prima che il download avvenga. Vedi la mia risposta per i dettagli su dove vengono archiviati questi dati su OS X.
bmike
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.