Wie ändere ich das Zeitformat, das von der ls-Befehlszeile unter osx verwendet wird?

27

Ich möchte die lsAnzeigezeit im ISOFormat (Militärformat) machen. Wie kann ich dieses Verhalten ändern?

Unter Linux wusste ich, dass ich ls zwingen könnte, die Zeit im Langformat von usin anzuzeigen, --full-timeaber dies funktioniert unter OS X nicht.

Update: Ich weiß, dass das vom Befehl verwendete Format auf den localeEinstellungen basiert . Das Problem ist, dass OS XI den Einstellungs-Trick nicht anwenden konnte LC_TIME=en_DK.

Sorin
quelle
1
Eine nicht beantwortete, aber dennoch möglicherweise nützliche Funktion: Der Befehl stat (1) ist sehr flexibel und kann so eingestellt werden, dass Zeitstempel in einem beliebigen Format angezeigt werden.
Harald Hanche-Olsen
gls (gnu ls) Ich habe in meiner Antwort erwähnt, dass ein --style = Flag verwendet werden kann, bei dem Sie eine + FORMAT-Zeichenfolge angeben können, damit das Datum wie gewünscht angezeigt wird.
Barryj
Ich wünschte, ich wüsste einen Weg. Apples BSD-Handbuch für lsbietet anscheinend nichts zum Formatieren von Datumsangaben, außer zum Ändern der Zeitzone und zum Sortieren nach Datum und Uhrzeit anstatt nach Alpha. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter

Antworten:

16

Wenn Sie gnu coreutils installieren, steht Ihnen gnu ls zur Verfügung. Wenn Sie brew als Paketmanager verwenden, ist das so einfach wie:

brew install coreutils
gls -l --time-style=full-iso
barryj
quelle
Danke, das ist nützlich, löst aber das Problem nicht. Das verwendete Vollformat ist immer noch nicht ISO-8601.
Sorin
OK - Sie können gnu coreutils installieren, einschließlich gnu ls, die tun, was Sie wollen. Am einfachsten geht es mit Brew, MacPorts oder Fink. Ich benutze brew - also funktioniert es einfach, 'brew install coreutils' auszuführen. Sie haben dann gls zur Verfügung.
Barryj
1
Insbesondere brew install coreutilsin den Ergebnissen /usr/local/bin/glsinstalliert, so dass Sie ausführen müssen glsstatt ls.
erik.weathers
Sie müssen das Zeitformat mit angeben gls -l --time-syle="+%I"(oder wie auch immer das korrekte gdateFormat für ISO-8601 lautet).
Rubynorails
Richtiger Anruf ist also; gls -l --time-style = full-iso
AnneTheAgile
13

Der in OS X integrierte lsBefehl benötigt keine Argumente für die statZeitformatierung , aber für den Befehl werden Strftime-Formatierungszeichenfolgen verwendet, damit Sie eine ungefähre Vorstellung davon erhalten, was Sie möchten:

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

Das %FT%Terzeugt einen lokalen ISO8601-Zeitstempel. Fügen Sie ein hinzu, %zwenn Sie einen UTC-Offset wünschen.

Aber während der Zeitstempel stimmt, entspricht der Rest nur ungefähr dem, was Sie von ls erhalten würden. Zum Beispiel ls -lkönnen richtig ausrichtet Felder in Spalten, kolorieren Ausgang, und natürlich führt es Verzeichnisinhalte anstatt dass Sie alle Dateinamen als Argument zu übergeben. Sie können die korrekte Ausrichtung zumindest reproduzieren, indem Sie die Ausgabe weiterleiten tr, um alle Leerzeichen in Registerkarten zu konvertieren:

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

Alternativ denke ich, dass es möglich sein sollte ls -l, einen ISO8601-Zeitstempel durch Definieren eines benutzerdefinierten Gebietsschemas zu erstellen, aber ich habe es nicht gesehen.

Algen
quelle
-1

ls -l --time-style=iso funktioniert gut für mich.

Kumar
quelle
1
Nicht. Berglöwe.
Nakilon
2
Auch nicht bei Mavericks.
Clay Bridges
4
Es funktioniert wahrscheinlich einwandfrei für das OP, da er oder sie ein Nicht-System lsüber einen Paketmanager wie brew installiert hat, ohne es zu bemerken.
Algen
1
Stimmen Sie mit @algal überein. Ich habe /usr/local/bin/glsvia installiert brew install coreutils, und das unterstützt die --time-styleOption. Möglicherweise wurde das OP ausgeführt, brew install coreutils --with-default-nameswas /usr/local/bin/lszur Installation (unter anderem von Dienstprogrammen) führen würde, oder das OP hat möglicherweise einen manuellen Symlink zu eingerichtet gls.
erik.weathers
Was sehen Sie, wenn Sie eintreten which ls?
mschaef