Я нашел способ показать дату в изоформате: Как заставить 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 предпочтено.
Можно использовать сокращение, чтобы сделать это задание для Вас довольно легко
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/
который, кажется, работает с условиями, представленными в комментариях
Вы не можете с 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
избегает рекурсии.
ls --time-style=+%Y-%m-%d
должен работать приятно, можно также использовать различные модификаторы даты
это согласно man ls
show times using style STYLE: full-iso, long-iso, iso, locale, or +FORMAT;
Можно использовать 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