Как изменить формат времени, используемый командной строкой 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
barryj
источник
Спасибо, это полезно, но не решает проблему. Полный используемый формат все еще не соответствует 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