команда ls: Покажите время только (в изоформате)

Я нашел способ показать дату в изоформате: Как заставить ls произвести формат ISO 8601

Теперь я хочу показать только время, не столбцы прежде:

ls --time-style=long-iso  -l
drwxr-xr-x 11 foo foo  4096 2018-03-06 14:17 mydir

Как я могу заставить вывод быть похожим на это?

2018-03-06 14:17 mydir

Решение без cut/grep/sed/awk/tr предпочтено.

1
задан 11 February 2019 в 14:36

4 ответа

Можно использовать сокращение, чтобы сделать это задание для Вас довольно легко

hostname$ ls --time-style=long-iso  -l | cut -f 6- -d " "
2019-02-06 02:57 Desktop/
2019-02-07 02:08 Documents/
2019-02-08 04:02 Downloads/
2019-01-29 04:04 Pictures/
2018-12-15 13:35 VirtualBox VMs/
2019-02-08 03:34 custom-repo/

Как был указан в комментариях, это только работает при определенных обстоятельствах. Однако я думаю, что это - что-то, с чем можно сделать awk также (я никоим образом не утверждаю, что был awkspert :-), ни я даже близко к одному), но я предложил это awk решение

hostname$ ls --time-style=long-iso  -la | awk '{print $6, $7, $8, $9}'
Jan 29 08:34 .xinitrc
Dec 17 17:55 .xinitrc.bkp
Feb 8 04:21 .zcompdump
Feb 8 04:58 .zdirs
Oct 11 16:51 .zprofile
Dec 10 10:17 .zsh_history
Feb 7 01:48 .zshrc.local
Feb 6 02:57 Desktop/
Feb 7 02:08 Documents/
Feb 8 04:02 Downloads/
Jan 29 04:04 Pictures/
Dec 15 13:35 VirtualBox
Feb 8 03:34 custom-repo/

который, кажется, работает с условиями, представленными в комментариях

4
ответ дан 3 December 2019 в 06:20

Вы не можете с ls один. Но find имеет a -printf действие, которое допускает пользовательский вывод. См. руководство, особенно раздел о -printf format.

me@ubuntu:~> find . -maxdepth 1 -printf '%TY-%Tm-%Td %TH:%TM %f\n'
2019-02-07 11:25 .
2019-02-05 18:58 foo.txt
2019-02-05 17:40 bar.txt
2019-01-22 16:47 other.file
2019-02-05 16:42 README.txt

Здесь %TY обозначает год времени изменения файла, %Tm месяц, и так далее. %f имя файла. -maxdepth 1 избегает рекурсии.

3
ответ дан 3 December 2019 в 06:20

ls --time-style=+%Y-%m-%d

должен работать приятно, можно также использовать различные модификаторы даты

это согласно man ls

show times using style STYLE: full-iso, long-iso, iso, locale, or +FORMAT;
0
ответ дан 3 December 2019 в 06:20

Можно использовать stat -c"%y %n" и ее вывод прибывает вполне близко к тому, что Вы хотите, однако без последующей обработки, это не точно то же, например:

$ stat -c"%y %n" *
2019-02-08 00:36:58.025402641 +0100 file.docx
2019-02-08 00:36:55.845416494 +0100 file.txt
2019-02-02 16:50:59.572351725 +0100 test

Для удаления секунд и части часового пояса, можно использовать sed следующим образом:

$ stat -c"%y %n" * | sed 's/:[^:]*+[0-9]*//'
2019-02-08 00:36 file.docx
2019-02-08 00:36 file.txt
2019-02-02 16:50 test

Если Вы хотите сделать это обоснованно, т.е. не полагаясь на обработку текста, необходимо использовать date. Обратите внимание однако, что это называет обоих stat и date однажды для каждого обработанного файла/каталога, который не эффективен.

$ for i in *; do printf '%s %s\n' "$(date -d@$(stat -c%Y "$i") +'%F %R')" "$i"; done
2019-02-08 00:36 file.docx
2019-02-08 00:36 file.txt
2019-02-02 16:50 test
2
ответ дан 3 December 2019 в 06:20

Другие вопросы по тегам:

Похожие вопросы: