Это не работает, потому что команда date
возвращает строку с пробелами.
$ date
Wed Oct 16 19:20:51 EDT 2013
Если вы действительно хотите, чтобы имена файлов были такими, вам нужно заключить эту строку в кавычки.
$ touch "foo.backup.$(date)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:22 foo.backup.Wed Oct 16 19:22:29 EDT 2013
Вы, вероятно, думаете о другой строке, которая будет добавлена, но я думаю. Я обычно использую что-то вроде этого:
$ touch "foo.backup.$(date +%F_%R)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:25 foo.backup.2013-10-16_19:25
См. Справочную страницу для даты для большего количества кодов форматирования вокруг вывода для даты и времени.
Дополнительные форматы
Если вы хотите получить полный контроль, если вы обратитесь к странице руководства, вы можете сделать что-то вроде этого:
$ date +"%Y%m%d"
20131016
$ date +"%Y-%m-%d"
2013-10-16
$ date +"%Y%m%d_%H%M%S"
20131016_193655
ПРИМЕЧАНИЕ: вы можете использовать date -I
или date --iso-8601
который будет производить идентичный вывод для date +"%Y-%m-%d
. Этот переключатель также может принимать аргументы для указания различных форматов времени :
$ date -I=?
date: invalid argument ‘=?’ for ‘--iso-8601’
Valid arguments are:
- ‘hours’
- ‘minutes’
- ‘date’
- ‘seconds’
- ‘ns’
Try 'date --help' for more information.
Примеры:
$ date -Ihours
2019-10-25T01+0000
$ date -Iminutes
2019-10-25T01:21+0000
$ date -Iseconds
2019-10-25T01:21:33+0000