Как изменить формат времени, используемый командной строкой ls на osx?


27

Я хочу сделать lsотображение времени в ISOформате (военный формат). Как я могу изменить это поведение?

В Linux я знал, что могу заставить ls отображать время в длинном формате с помощью usin, --full-timeно это не работает на OS X.

Обновление: я знаю, что формат, используемый командой, основан на localeнастройках. Проблема в том, что на OS XI не удалось использовать хитрость настройки LC_TIME=en_DK.


1
Не отвечающий, но все же возможно полезный: команда stat (1) довольно гибкая и может быть использована для отображения меток времени в любом желаемом формате.
Харальд Ханче-Олсен

gls (gnu ls), о котором я упоминал в своем ответе, может иметь флаг --style =, в котором вы можете указать строку + FORMAT, чтобы вы могли отображать дату так, как пожелаете.
Barryj

Я хотел бы знать способ. Руководство Apple BSD для, lsпохоже, ничего не предлагает для форматирования даты и времени, кроме изменения часового пояса и сортировки по дате и времени, а не по альфа. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter

Ответы:


16

Если вы устанавливаете gnu coreutils, то доступен gnu ls, который будет работать по мере необходимости. Если вы используете brew в качестве менеджера пакетов, это так просто:

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

Спасибо, это полезно, но не решает проблему. Полный используемый формат все еще не соответствует ISO-8601.
сорин

ОК - вы можете установить gnu coreutils, который включает в себя gnu ls, который будет делать то, что вы хотите. Самый простой способ - один из вариантов: Brew, MacPorts или Fink. Я использую brew - так что просто работает brew install coreutils. Затем вы будете иметь доступ к ГЛС.
Баррый

1
Примечательно, что это brew install coreutilsприводит /usr/local/bin/glsк установке, поэтому вам нужно запустить glsвместо ls.
erik.weathers

Вам необходимо указать формат времени с помощью gls -l --time-syle="+%I"(или любого gdateдругого правильного формата стиля для ISO-8601).
Rubynorails

Правильный вызов таков; gls -l - time-style = full-iso
AnneTheAgile

13

Встроенная lsкоманда OS X не принимает аргументы форматирования времени, но statкоманда принимает строки формата strftime, так что вы можете получить приближение того, что вы хотите, выполнив:

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

%FT%TПроизводит ISO8601 локальную метку времени. Добавьте, %zесли вы хотите смещение UTC.

Но хотя временная метка верна, остальные только приближают то, что вы получите от ls. Например, ls -lправильно выравнивает поля по столбцам, может раскрасить вывод и, конечно, в нем перечисляется содержимое каталога, а не требовать передачи всех имен файлов в качестве аргументов. Вы можете, по крайней мере, воспроизвести правильное выравнивание, передавая выходные данные, trчтобы преобразовать все пробелы во вкладки:

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

В качестве альтернативы, я думаю, что можно ls -lсоздать временную метку ISO8601, определив пользовательский языковой стандарт, но я этого не видел.


-1

ls -l --time-style=iso прекрасно работает для меня


1
Не имеет . Горный лев.
Накилон

2
Не на Маверикс тоже.
Глиняные Мосты

4
Это, вероятно, работает нормально для OP, потому что он или она установили не систему, lsне осознавая этого, с помощью менеджера пакетов, такого как brew.
Водоросли

1
Согласитесь с @algal. Я /usr/local/bin/glsустановил через brew install coreutils, и это поддерживает --time-styleопцию. OP может работать, brew install coreutils --with-default-namesчто приведет к /usr/local/bin/lsего установке (среди других утилит), или, возможно, OP установит ссылку на ссылку вручную gls.
erik.weathers

Что вы видите при входе which ls?
mschaef
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.