Jak zmienić format czasu używany przez wiersz polecenia ls w systemie OSX?

27

Chcę lsustawić czas wyświetlania w ISOformacie (format wojskowy). Jak mogę zmienić to zachowanie?

W systemie Linux wiedziałem, że mogę zmusić ls do wyświetlania czasu w długim formacie przez nas, --full-timeale to nie działa w systemie OS X.

Aktualizacja: Wiem, że format używany przez polecenie jest oparty na localeustawieniach. Problem polega na tym, że w systemie OS XI nie był w stanie skorzystać ze sztuczki ustawień LC_TIME=en_DK.

sorin
źródło
1
Brak odpowiedzi, ale nadal prawdopodobnie przydatny: Komenda stat (1) jest dość elastyczna i można ją wyświetlać w dowolnym formacie czasu.
Harald Hanche-Olsen
gls (gnu ls) Wspomniałem w mojej odpowiedzi, może wziąć flagę --style =, w której możesz podać ciąg + FORMAT, dzięki czemu możesz wyświetlać datę w dowolny sposób.
barryj
Chciałbym znać sposób. lsWydaje się, że instrukcja BSD firmy Apple dotycząca formatowania czasu danych, poza zmianą strefy czasowej i sortowaniem według daty, a nie alfy. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter

Odpowiedzi:

16

Jeśli zainstalujesz gnu coreutils, wtedy gnu ls będzie dostępny, co zrobi zgodnie z wymaganiami. Jeśli używasz naparu jako menedżera pakietów, jest to tak proste, jak:

brew install coreutils
gls -l --time-style=full-iso
barryj
źródło
Dzięki, jest to przydatne, ale nie rozwiązuje problemu. Używany pełny format wciąż nie jest zgodny z ISO-8601.
sorin
OK - możesz zainstalować GNU Coreutils, który zawiera GNU LS, który zrobi to, co chcesz. Najłatwiejszym sposobem jest napar, MacPorts lub Fink. Używam naparu - więc po prostu działam jako „napar instaluj coreutils”. Będziesz wtedy mieć dostępne gls.
barryj
1
W szczególności brew install coreutilspowoduje /usr/local/bin/glsto zainstalowanie, więc musisz uruchomić glszamiast ls.
erik.weathers
Musisz określić format czasu za pomocą gls -l --time-syle="+%I"(lub dowolnego poprawnego gdateformatu stylu dla ISO-8601).
rubynorails
Prawidłowe połączenie jest zatem; gls -l --time-style = full-iso
AnneTheAgile
13

Wbudowane lspolecenie OS X nie wymaga argumentów formatujących czas, ale statpolecenie przyjmuje ciągi formatujące strftime, dzięki czemu można uzyskać przybliżenie tego, co chcesz, robiąc:

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

%FT%TProdukuje ISO8601 lokalnego znacznika czasu. Dodaj, %zjeśli chcesz przesunięcie UTC.

Ale chociaż znacznik czasu jest odpowiedni, reszta przybliża tylko to, co można uzyskać od ls. Na przykład ls -lodpowiednio wyrównuje pola w kolumnach, może pokolorować dane wyjściowe i oczywiście wyświetla zawartość katalogu, zamiast wymagać przekazywania wszystkich nazw plików jako argumentów. Możesz przynajmniej odtworzyć właściwe wyrównanie, przesyłając dane wyjściowe, traby przekonwertować wszystkie spacje na tabulatory:

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

Alternatywnie, myślę, że powinno być możliwe ls -lwygenerowanie znacznika czasu ISO8601 poprzez zdefiniowanie niestandardowych ustawień narodowych, ale nie widziałem tego.

glon
źródło
-1

ls -l --time-style=iso działa dobrze dla mnie.

Kumar
źródło
1
Nie Lew górski.
Nakilon,
2
Nie ma też Mavericks.
Clay Bridges,
4
Prawdopodobnie działa dobrze dla OP, ponieważ on lub ona zainstalowała system lsnie zdając sobie z tego sprawy, za pośrednictwem menedżera pakietów, takiego jak napar.
glon
1
Zgadzam się z @algal. Mam /usr/local/bin/glszainstalowany za pośrednictwem brew install coreutils, i który obsługuje --time-styleopcję. OP mógł zostać uruchomiony, brew install coreutils --with-default-namesco spowodowałoby /usr/local/bin/lsinstalację (między innymi narzędziami), lub może OP skonfigurował ręczne łącze symboliczne do gls.
erik.weathers
Co widzisz po wejściu which ls?
mschaef