Come posso cambiare il formato dell'ora usato dalla riga di comando di ls su osx?


27

Voglio rendere il lstempo di visualizzazione in ISOformato (formato militare). Come posso cambiare questo comportamento?

Su Linux sapevo che avrei potuto forzare la visualizzazione del tempo in formato lungo da parte nostra, --full-timema questo non funziona su OS X.

Aggiornamento: so che il formato utilizzato dal comando si basa sulle localeimpostazioni. Il problema è che su OS XI non ero in grado di usare il trucco delle impostazioni LC_TIME=en_DK.


1
Una non risposta, ma comunque utile: il comando stat (1) è abbastanza flessibile e può essere fatto per visualizzare i timestamp in qualsiasi formato desiderato.
Harald Hanche-Olsen,

gls (gnu ls) che ho citato nella mia risposta può prendere un --style = flag dove puoi specificare una stringa + FORMAT, così puoi far apparire la data come preferisci.
Barryj

Vorrei sapere un modo. Il manuale di Apple BSD per lssembra non offrire nulla per la formattazione dei tempi dei dati, a parte la modifica del fuso orario e l'ordinamento per datetime anziché alfa. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter,

Risposte:


16

Se installi gnu coreutils, allora è disponibile gnu ls, che farà come richiesto. Se usi brew come gestore di pacchetti, è semplice come:

brew install coreutils
gls -l --time-style=full-iso

Grazie, questo è utile ma non risolve il problema. Il formato completo utilizzato non è ancora ISO-8601.
sorin,

OK - puoi installare gnu coreutils che include gnu ls, che farà quello che vuoi. Il modo più semplice è quello di preparare birra, MacPorts o Fink. Uso brew, quindi eseguo solo "brew install coreutils". Avrai quindi gls disponibili.
Barryj,

1
In particolare, brew install coreutilsrisulta /usr/local/bin/glsessere installato, quindi è necessario eseguire glsinvece di ls.
erik.weathers

Devi specificare il formato dell'ora con gls -l --time-syle="+%I"(o qualunque sia il gdateformato corretto per ISO-8601).
rubynorails,

La chiamata corretta è quindi; gls -l --time-style = full-iso
AnneTheAgile

13

Il lscomando integrato di OS X non richiede tempo per la formattazione degli argomenti, ma il statcomando accetta le stringhe di formato strftime in modo da poter ottenere un'approssimazione di ciò che vuoi facendo:

stat -l -t '%FT%T' *

Il %FT%Tproduce un ISO8601 timestamp locale. Aggiungi un %zse vuoi un offset UTC.

Ma mentre il timestamp è giusto, il resto si avvicina solo a ciò che otterresti da ls. Ad esempio, ls -lallinea correttamente i campi in colonne, può colorare l'output e, naturalmente, elenca il contenuto della directory anziché richiedere di passare tutti i nomi di file come argomenti. Puoi almeno riprodurre il corretto allineamento eseguendo il piping dell'output trper convertire tutti gli spazi in schede:

stat -l -t '%F%T' * | tr ' ' \\t

In alternativa, penso che dovrebbe essere possibile ottenere ls -lun timestamp ISO8601 definendo una localizzazione personalizzata, ma non l'ho visto fatto.


-1

ls -l --time-style=iso funziona bene per me.


1
Non lo fa. Leone di montagna.
Nakilon,

2
Neanche su Mavericks.
Clay Bridges,

4
Probabilmente funziona bene per l'OP, perché lui o lei ha installato un non-sistema lssenza accorgersene, tramite un gestore di pacchetti come brew.
Algal

1
Concordo con @algal. Ho /usr/local/bin/glsinstallato tramite brew install coreutilse supporta l' --time-styleopzione. L'OP potrebbe essere stato eseguito e brew install coreutils --with-default-namesciò comporterebbe /usr/local/bin/lsl'installazione (tra le altre utility), oppure l' OP potrebbe impostare un collegamento simbolico manuale a gls.
erik.weathers

Cosa vedi quando entri which ls?
mschaef,
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.