Як змінити формат часу, використовуваний командним рядком 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

Я б хотів, щоб я знав спосіб. Посібник з BSD від Apple, 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, який буде робити те, що ви хочете. Найпростіший спосіб - це заварювання, MacPorts або Fink. Я використовую пивоварне - так що просто працює "варити встановити coreutils" працює. Потім у вас будуть доступні gls.
barryj

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команда займає рядки формату стропок, так що ви можете отримати приблизне значення того, що ви хочете:

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
Це, ймовірно, добре працює для ОП, оскільки він або вона встановили несистему, lsне усвідомлюючи це, через менеджер пакунків, як пивовар.
algal

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

Що ви бачите, коли входите which ls?
mschaef
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.