В Linux як зробити файл з ім'ям, яке є поточною датою та часом


12

Я хочу створити файл, ім'я якого буде поточною датою та часом. Я можу створити файл за допомогою touchкоманди. Також я можу отримати поточний час за допомогою dateкоманди. Отже, я думаю, мені потрібно якось передати другу команду першій. Як я можу це зробити?

Відповіді:


19

Використовуйте повернене значення з виразу оболонки як аргумент для touch:

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

Результат: файл з ім'ям, наприклад 2012-03-11_14-33-53.

Ця відповідь передбачає, що ви використовуєте bash(це описано у розділі manсторінки Заміна команди ), але інші оболонки будуть працювати однаково або лише трохи відрізняються.



Я видалив свій коментар, тому що Маркдаун зламав основи. дякую за посилання @DanielBeck
Gao

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 Single quotes не працюватиме, оскільки вони не дозволяють замінити команди чи будь-яку іншу інтерпретацію. Дивіться цитування в посібнику Bash.
slhck

2
@gasan Різниця полягає в тому, що вміст одиничних лапок не оцінюється. Спробуйте з echo "$HOME"і echo '$HOME'. Ось чому я запропонував використовувати ".
Даніель Бек

0

Можна використовувати більш просту команду

touch $(date | tr ' ' '-')

Дещо менш елегантний і, можливо, менш портативний, але, так, це теж працюватиме.
Скотт

Гаразд, оскільки я знаю, що ти це читаєш, я перегляну трохи детальніше: відповідь Даніеля дає результат у відомому та повністю контрольованому форматі. (1) Вихід з dateтипово показує час як hh: mm: ss. Ваша відповідь призводить до назви файлів, що містять двокрапки. Це може спричинити помилку в файлових системах на базі Windows. (2) Невизначений вихід із простого виклику dateлокально залежить; тобто пристосований до місцевої мови. Спробуйте LANG=de_DE dateі LANG=fr_FR dateподивіться приклади. … (Продовження)
Скотт

(Протяг)… (2а) Отже, у випадку (мабуть?) Ви коли-небудь змінюєте мову своєї системи або надаєте свій скрипт та колекцію файлів даних із вашої системи тому, кому система налаштована на інша мова, буде невідповідність. (Я не впевнений, що це була б реальна проблема, але це було б естетичним питанням.) (2b) Я не знаю жодної локалі, яка б це робила, але теоретично могла бути локаль, де dateзаписується дата як мм / дд / рр (або дд / мм / рік). … (Продовження)
Скотт

(Продовження)… Якщо ви коли-небудь стикалися з такою системою, у вас з'являться імена файлів, які містять косу рису, і це призведе до помилок. (3) Відповідь Даниїла дає результат, коли лексикографічний (тобто алфавітний) порядок, створений за lsабо *відповідає хронологічному порядку. З вашою відповіддю всі Friфайли опиняться на початку будь-якого лексикографічно відсортованого списку Aprта Augз'являться раніше всіх інших місяців.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.