В Linux как сделать файл с именем, которое является текущей датой и временем

12

Я хочу сделать файл, именем которого будет текущая дата и время. Я могу создать файл с помощью touchкоманды. Также я могу узнать текущее время с помощью dateкоманды. Итак, я думаю, мне нужно каким-то образом передать вторую команду первой. Как я могу это сделать?

Der Hochstapler
источник

Ответы:

19

Используйте возвращаемое значение из выражения оболочки в качестве аргумента для touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Результат: файл с именем eg 2012-03-11_14-33-53.

В этом ответе предполагается, что вы используете bash(это описано в manразделе « Подстановка команд» на странице ), но другие оболочки будут работать так же или только немного по-другому.

Даниэль Бек
источник
@MdGao И описано в том же разделе справочной страницы. Я предпочитаю ответ, который я дал, вот несколько причин
Даниэль Бек
Я удалил свой комментарий, потому что Markdown сломал галочки. спасибо за ссылку @DanielBeck
Мэнди Гао
2
@gasan Просто заключите его в "кавычки. Вы можете представить себе выход dateзаменить эту часть командной строки, и touch Sun Mar 11 14:48:31 CET 2012будет создавать имена файлов Sun, Marи т.д. touch "Sun Mar 11 14:48:31 CET 2012", с другой стороны , работает отлично ( за исключением я не уверен , насколько хорошо колоны будет работать).
Даниэль Бек
2
@gasan Одиночные кавычки не будут работать, потому что они не допускают подстановку команд или любую другую интерпретацию. См. Цитирование в руководстве по Bash.
slhck
2
@gasan Разница в том, что содержание одинарных кавычек не оценивается. Попробуйте это с echo "$HOME"и echo '$HOME'. Вот почему я предложил использовать ".
Даниэль Бек
0

Вы можете использовать более простую команду

touch $(date | tr ' ' '-')
Омар Мардини
источник
Несколько менее элегантный и, возможно, менее портативный, но да, это тоже сработает.
Скотт
Хорошо, так как я знаю, что вы читаете это, я углублюсь в немного больше деталей: ответ Даниэля дает результат в известном и полностью контролируемом формате. (1) Выходные данные dateобычно показывают время в формате чч: мм: сс. Ваш ответ приводит к именам файлов, содержащим двоеточия. Это может привести к ошибке в файловых системах Windows. (2) Необработанный вывод простого вызова dateзависит от локали; т. е. настроенный на местный язык. Попробуйте LANG=de_DE dateи LANG=fr_FR dateувидеть примеры. … (Продолжение)
Скотт
(Продолжение)… (2a) Таким образом, в (маловероятном?) Случае, когда вы когда-либо меняете язык в вашей системе, или вы передаете свой сценарий и набор файлов данных из вашей системы кому-то, чья система настроена для другой язык, будет несоответствие. (Я не уверен, что это будет реальная проблема, но это будет эстетическая проблема.) (2b) Я не знаю ни одной локали, которая делает это, но теоретически может быть локаль, где dateзаписывается дата как мм / дд / гг (или дд / мм / гг). … (Продолжение)
Скотт
(Продолжение)… Если вы когда-либо сталкивались с такой системой, у вас будут имена файлов, содержащие косую черту, и это приведет к ошибкам. (3) Ответ Даниила дает результат, когда лексикографический (т. Е. Алфавитный) порядок в том виде, в котором он создан lsили *соответствует хронологическому порядку. С вашим ответом все Friфайлы будут в начале любого лексикографически отсортированного списка Aprи Augпоявятся раньше всех остальных месяцев.
Скотт