Как вы указали дату и время в имени файла?


23

Я пытаюсь выполнить команду и хотел бы указать дату и время в имени выходного файла.

Вот пример команды, которую я хотел бы выполнить.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Формат даты и времени может быть чем угодно с подчеркиванием. Даже UTC, если AM и PM не могут быть использованы.


Если не Bash, то какую оболочку вы используете?
Райан

О, это bash ... Я имел в виду bash script *
visc

Вы не пьяный, вы перенаправляете. И вопрос был бы таким же, если бы вы не перенаправляли. Обновление заголовка.
Микель

Ответы:


46

Если вы хотите использовать текущую дату и время в качестве имени файла, вы можете использовать dateи команду подстановки .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Это приводит к тому, что файл 2016_04_25_10_30_AM.log(хотя и с текущей датой-временем) создается с хэшем md5 в /etc/mtabкачестве его содержимого.

Обратите внимание, что имена файлов, содержащие метки времени в 12-часовом формате, вероятно, будут сортироваться не так, как вы хотите. Вы можете избежать этой проблемы, используя вместо этого временные метки в 24-часовом формате.

Если у вас нет требования использовать этот конкретный формат даты, вы можете рассмотреть возможность использования формата даты-времени, совместимого с ISO 8601. Некоторые примеры того, как генерировать действительные представления даты и времени ISO 8601, включают:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Если вы хотите «более безопасные» имена файлов (например, для совместимости с Windows), вы можете опустить двоеточия из временной части.

Помните, что все приведенные выше примеры предполагают местное системное время. Если вам нужно представление времени, которое согласовано между часовыми поясами, вы должны указать смещение часового пояса или UTC. Вы можете получить смещение часового пояса, совместимое с ISO 8601, используя «% z» в части форматирования вашего dateвызова, например:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Вы можете получить время UTC в своем dateвызове, указав -uфлаг и добавив «Z» в конец строки даты и времени, чтобы указать, что время указано в формате UTC, например:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@Mikel Мы с тобой перекрестно редактировали?
Райан

Возможно. Я просто изменил «subshell» на «подстановка команд». Я закончил, пожалуйста, отредактируйте, как вам нравится.
Микель

@Mikel Нет проблем. Я повторно отправил свою правку сейчас.
Райан

@Mikel Не беспокойся! Я должен был помнить, чтобы назвать это «подстановка команд» в любом случае. Спасибо за улучшение ответа!
Райан

3
Подчеркивание - странный персонаж. Предпочтительно использовать ISO-8601, $(date +%FT%T)который даст 2016-04-25T10:30:00.
5
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.