Это не работает, потому что команда 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
touch foo`date +%F`
тоже отлично работает.csh
оболочке...
) вместо$(..)
. Оболочки С, по-видимому, не поддерживают это обозначение для подоболочек.date +"%Y-%m-%d"
так же, какdate -I
. В любом случае, я рекомендую ISO форматы. Точность может быть указана путем добавления часов, минут, секунд или нс к параметру-I
. Примерdate -Iseconds
.Это расширяется до чего-то вроде
cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013
. Пробел перед фигурными скобками начинается с нового слова.Скобки в отдельных словах, поэтому они интерпретируются буквально. Кроме того,
$((…))
это синтаксис для арифметического расширения; выводdate
не имеет ничего общего с арифметическим выражением. Подстановка команд использует один набор скобок:$(date)
.Ближе. Вы могли бы выразить это в скобках как
cp foo.{txt,.backup.`date`}
. По-прежнему существует проблема, заключающаяся в том, что выходные данныеdate
содержат пробелы, поэтому их необходимо заключать в двойные кавычки. Это будет работать:или же
Формат вывода по умолчанию
date
не очень подходит для имени файла, и он может даже не работать, если в локали используются/
символы в формате вывода по умолчанию. Используйте формат даты YMD, чтобы лексикографический порядок имен файлов был хронологическим (а также чтобы избежать неоднозначности между американскими и международными форматами дат).источник
Если вы действительно хотите использовать подробную дату, вы должны защитить обратную галочку. С этим форматом даты является то, что он имеет встроенные пробелы, нет-нет в оболочке Unix, если вы не помещаете их в кавычки (или не экранируете их другим способом).
Однако я предпочитаю использовать более короткий формат ISO:
источник
Используйте функцию, она облегчит вашу жизнь. Это то, что я использую:
источник
Как
date
по умолчанию в выводе есть пробелы, ваша последняя команда не выполнена. Если вы процитировали последний аргумент внутри"
, он должен работать. Ваши другие попытки имеют просто неправильный синтаксисЗдесь возможное решение без пробелов:
или же
Если вы добавите
на ваш
.bashrc
и заново войдите / пусть ваш bash перечитает его, вам нужно просто позвонитьbk file.txt
.источник
--iso-8601
указан, поэтому я разместил ссылку здесь. Варианты даты GNU: --iso-8601Вы копируете файл в файл резервной копии, имя которого создается с добавленной отметкой времени
ИЛИ ЖЕ:
Вы можете отобразить содержимое файла с помощью «cat» и перенаправить вывод в файл резервной копии, имя которого создается с добавленной отметкой времени
Вы также можете использовать дополнительные параметры управления FORMAT в соответствии с вашими потребностями, например:% H,% M,% S и т. Д.
источник
cat
перенаправленияcp
?Когда мне нужно сделать резервную копию файла, я обычно делаю это таким образом.
cp foo.txt foo.backup.$(date +%F).txt
ls -l
foo.txt foo.backup.2017-9-19.txt
источник
%F
формат даты производит двухзначные месяцы иls -l
обычно дает чуть больше информации, чем просто имена файлов.В bash вы можете ввести:
Который расширяется до:
В результате чего:
Говяжье существо
date -Is
. Мне нравится его использовать, потому что он легко запоминается, печатается и допускает короткие версии (например,-In
если вы преклонный человек).!
запускает указатель события:И
$
это слово обозначение:источник
Если вы просто хотите создать резервную копию файла или каталога, то зачем также указывать место назначения, просто используйте расширение оболочки, чтобы добавить дату в конец имени файла копии.
т.е.
что приводит к
или просто использовать
Добавьте дату, чтобы удовлетворить ваши потребности. :)
источник