Як ви ставите дату та час у назві файлу?


23

Я намагаюся виконати команду і хотів би вказати дату та час у назві вихідного файла.

Ось зразок команди, яку я хотів би виконати.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Формат часу дати може бути різним, якщо підкреслити. Навіть UTC, якщо AM та PM не можна використовувати.


Якщо не Bash, то яку оболонку ви використовуєте?
Райан

О, це баш ... Я мав на увазі сценарій bash *
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" до кінця рядка date date, щоб вказати, що час є UTC таким чином:

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

@Mikel Ви та я перекреслили?
Райан

Можливо. Я просто змінив "subshell" на "substitution". Я закінчую зараз, тому редагуйте, як вам подобається.
Мікель

@Mikel Немає проблем. Я знову відправив своє редагування.
Райан

@Mikel Не хвилюйтесь! Я повинен був пам’ятати, як би це не було називати «заміною команди». Дякуємо за вдосконалення відповіді!
Райан

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