Как добавить дату к имени файла

Обновлено: 21.11.2024

Я пытаюсь добавить текущую дату в конец имени файла следующим образом:

Вот что у меня есть:

Однако все, что я получаю, это имя файла, и оно ничего не добавляет. Как добавить текущую дату к имени файла?

5 ответов 5

Скорее всего, вы используете set . Это назначит «сегодня», «=» и вывод программы даты позиционным параметрам (также известным как аргументы командной строки). Вы хотите просто использовать оболочку C (которую вы помечаете как «bash», так что, скорее всего, нет), вы захотите использовать:

Обратите внимание на отсутствие пробелов вокруг знака равенства.

Вы также не хотите использовать & в конце своих утверждений; что заставляет оболочку не ждать завершения команды. Особенно, когда одно зависит от другого. Команда find может завершиться ошибкой, поскольку она запускается до mkdir .

Скрипт Bash для вставки даты в имя файла:

Этот код bash в файле с именем a.sh

При запуске печатает:

Пояснение кода:

Интерпретируйте сценарий с помощью интерпретатора /bin/bash. Создайте новую переменную с именем сегодня. Выполните команду даты, передав флаги Y, m, d, H, M, S, чтобы настроить вывод. Поместите результат в переменную даты.

Создайте новую переменную с именем filename, окружите переменную $today остальным статическим текстом имени файла. затем выведите имя файла на экран.

Втисните это в одну строчку, чтобы увеличить лулз:

Кажется, вы перепутали несколько вещей.

set today = 'date +%Y' выглядит как синтаксис tcsh, но даже в tcsh он присваивает строковую дату +%Y переменной сегодня, а не запускает команду даты. Поскольку вы, вероятно, используете bash или какую-либо другую оболочку POSIX, синтаксис присваивания будет сегодня=некоторое_значение (без пробелов вокруг знака равенства). Чтобы запустить команду и присвоить ее вывод переменной, используйте подстановку команд:

(Я также заполнил спецификацию даты). Вы можете использовать обратные кавычки вместо долларовых скобок, но их можно визуально спутать с прямыми кавычками, а правила, когда вам нужны кавычки внутри команды с обратными кавычками, довольно сложны и зависят от реализации, поэтому лучше не придерживаться $( …) (что имеет тот же эффект с более разумным синтаксисом).

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

В качестве альтернативы использованию && после каждой команды можно запустить скрипт с помощью set -e . Это говорит оболочке прекратить выполнение скрипта, как только любая команда вернет ненулевой статус (за исключением команд в условиях if и нескольких других случаев).

Ваша команда find хороша, но, вероятно, не делает того, что вы намеревались сделать (хотя я точно не знаю, что это такое).

Вы создаете каталог с помощью mkdir, а затем сразу же просматриваете его с помощью find . Это не будет полезно, если каталог уже не существует. Вы имели в виду создать каталог для сегодняшних журналов и переместить последние файлы из The_Logs в каталог с именем, например. The_Logs.2012-02-11 ?

Или вы хотели переименовать сегодняшние файлы журнала, чтобы добавить суффикс $today? Это требует вычисления различных имен файлов для каждого перемещаемого файла.

Обратите внимание, что я использовал -mtime для перемещения файлов на основе времени их модификации, а не -atime , которое указывает время последнего чтения файла (если ваша система отслеживает это, а если нет, то atime может быть еще в mtime).

Я очень часто добавляю текущую дату к имени файла из командной строки.

Исторически я всегда делал что-то подобное…

Однако это всегда казалось грязным… зачем мне вручную вводить текущую дату, когда я сижу перед компьютером, который в равной степени, если не лучше, способен делать то же самое?

Хотя я долго откладывал это исследование, сегодня я наконец обратился к Google в надежде найти более разумный подход.

Погуглить

Поиск быстро привел меня к вопросу «Как добавить дату в файл резервной копии» Stack Overflow. Там я нашел следующее предложение…

Хотя это улучшение в одном смысле, поскольку оно устраняет необходимость вручную вводить текущую дату, в другом это шаг назад, поскольку мне нужно помнить правильный синтаксис bash и формат времени, чтобы получить желаемое результат.

Должен быть лучший способ…

На помощь приходят функции + ~/.bashrc

К счастью, был. Bash позволяет вам определять пользовательские функции в точечном файле в вашем домашнем каталоге с именем .bashrc. Любые определенные там функции будут доступны всякий раз, когда вы открываете окно терминала.

ПРИМЕЧАНИЕ. Если вы используете zsh, вы можете сделать то же самое с ~/.zshrc

Я использовал эту функцию для определения пользовательской функции, которую я назвал add-date, которая автоматически добавляет дату к имени данного файла (в моем предпочтительном формате).

Вот что я добавил в свой файл ~/.bashrc.

ПРИМЕЧАНИЕ. После внесения изменений в файл ~/.bashrc (или ~/.zshrc) вам необходимо запустить source ~/.bashrc (или source ~/.zshrc ), чтобы изменения вступили в силу для текущего окна терминала. открыть.

Теперь я могу просто запустить команду add-date и передать ей файл, и она автоматически добавит мне дату….

Не стесняйтесь использовать или изменять по мере необходимости (например, если вы предпочитаете другой формат даты).

Привет, я Макс!

Я разработчик программного обеспечения, который в основном работает на PHP, но мне нравится заниматься другими языками, такими как Go и Ruby. Меня интересуют технические темы: мониторинг, безопасность и производительность. Я также сторонник хорошей документации и четкого технического письма.

Днем я руковожу командой разработчиков и решаю сложные технические проблемы в Something Digital, где в основном работаю с платформой Magento. Я также выступал на ряде мероприятий.

Если вы хотите связаться со мной, вы можете найти меня в Twitter и LinkedIn.

Весь исходный код этого сайта доступен на Github.

Если вы хотите прочитать об определенной теме, попробуйте выполнить поиск или просмотр по тегу.

Возможно, подойдет скрипт или какая-то команда в окне терминала. Я использую Linux (Ubuntu).

Заранее спасибо.

О, я чуть не забыл добавить, что скрипт или команда должны обновлять имя файла до новой даты каждый раз, когда вы хотите сохранить файл в определенной папке, но при этом сохраняя предыдущие файлы. Таким образом, в конечном итоге в папке будут такие файлы: filename_18Oct2009.txt , filename_9Nov2009.txt , filename_23Nov2009.txt

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

7 ответов 7

Вы можете использовать обратные кавычки .

Это добавляет дату к имени файла — в примере в вопросе дата должна идти между именем файла и расширением.

обратите внимание, что вы должны удалить двойные кавычки в "` (они необходимы для обхода интерпретатора синтаксиса SOF, но они должны быть удалены в ваших командах)

Возможно, это не ответ на полный вопрос, но мне потребовалась целая вечность, чтобы научиться использовать обратные апострофы, так что спасибо. (Как говорит @MehdiLAMRANI, я использую их без двойных кавычек.)

Здесь две проблемы.

<р>1. Получить дату в виде строки

Это довольно просто. Просто используйте команду даты с опцией +. Мы можем использовать обратные кавычки, чтобы зафиксировать значение в переменной.

Вы можете изменить формат даты, используя различные параметры %, как описано на справочной странице даты.

<р>2. Разделить файл на имя и расширение.

Это немного сложнее. Если мы думаем, что они будут только один. в имени файла мы можем использовать cut с расширением . в качестве разделителя.

Однако это не будет работать с несколькими файлами . в имени файла. Если мы используем bash — а вы, вероятно, используете — мы можем использовать некоторую магию bash, которая позволяет нам сопоставлять шаблоны при расширении переменных:

Соединяя их вместе, мы получаем:

И если нас меньше беспокоит удобочитаемость, мы делаем всю работу в одной строке (с другим форматом даты):

Можете ли вы дать более подробную информацию о том, что именно вы хотите сделать. Итак, у вас есть файл в каталоге, который вы хотите отметить датой таким образом. Это только один файл с одним и тем же именем каждый раз или это может быть несколько файлов с разными именами?

Я до сих пор не понимаю, что вы хотите сделать. В нем говорится, что скрипт должен обновлять имя файла «каждый раз, когда вы хотите сохранить файл в определенной папке». Что такое сохранение файла в папку? Откуда это?

Если вы хотите, чтобы имя файла менялось каждый раз, когда кто-то что-то сохраняет в определенный каталог, вам понадобится монитор файловой системы. Взгляните на inotify (человек inotify); вы должны быть в состоянии построить что-то таким образом.

Я использую этот скрипт в bash:

Этот скрипт копирует filename.ext в filename-date.ext, есть еще один, который перемещает filename.ext в filename-date.ext, вы можете загрузить их с здесь. Надеюсь, вы найдете их полезными!!

Я использую его в raspberry pi, и первый ответ у меня не работает, может быть, потому что я неправильно набрал или что-то в этом роде? Я не знаю. Поэтому я объединил приведенные выше ответы и пришел к следующему:

Это если вы хотите использовать geany или что-то еще

Вы можете добавить дату рядом с именем файла, вызывая команду даты в вложенной оболочке.

команда date с необходимыми параметрами форматирования вызывает фигурные скобки $() или между обратными кавычками ( `…` ) выполняется в вложенной оболочке, после чего вывод помещается в исходной команде.

$(. ) предпочтительнее, так как in может быть вложенным. Таким образом, вы можете использовать подстановку команд внутри другой подстановки.

Решения для запросов в вопросах

Команда date имеет множество параметров форматирования, которые позволяют настроить вывод даты в соответствии с требованиями.

Мне нужно создать сценарий оболочки, который добавляет отметку времени к существующему файлу. Я в основном использую Mac OS X для разработки. Хотел создать то же самое на Mac Terminal.

Вот некоторые основные сведения о команде даты.

Образцы:

Скрипт для добавления отметки даты к файлу:

Сообщите мне, если у вас есть готовый сценарий оболочки и вы хотите поделиться им с читателями Crunchify.

Удачного программирования и продолжайте посещать!

Присоединиться к обсуждению

Если вам понравилась эта статья, поделитесь ею в социальных сетях. Остались вопросы по статье, оставьте нам комментарий.

Другие популярные статьи.

Попробуйте.

О App Shah

Подписаться на рассылку…

Будьте в курсе и никогда не пропустите обновления! Подпишитесь на новости, последние статьи и специальные предложения!! Присоединяйтесь к 16+ миллионам читателей в месяц. 👋

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

Основная боковая панель

Лучшие технические руководства

  • НОВОЕ Мои 3 лучших приложения для повышения производительности Mac и 10 настроек iPhone, которые нужно отключить прямо сейчас!
  • Самое простое руководство по Spring MVC Hello World и Spring Boot
  • НОВОЕ Как синхронизировать пользовательские папки с iCloud Drive? и создайте RESTful-сервис с помощью Jersey JAX-RS
  • 10 лучших интервью по Java, вопросы и ответы и сортировка HashMap по ключу и значению
  • Установка Ansible в Linux и состояние гонки в многопоточности Java
  • Реализовать класс LinkedList с нуля и Java-клиент Memcached

Основные технологии Java

Купон на скидку 10 %: CRUNCHIFY

Современный, безопасный и быстрый управляемый хостинг WordPress. Проверьте это.

Полезное руководство по WordPress

  • НОВИНКА Начните первый блог WordPress и 15 основных советов по оптимизации
  • Используйте .htaccess, чтобы ускорить работу WordPress и остановить загрузку ненужных файлов на сайт
  • 5 основных советов по поисковой оптимизации и важность исследования ключевых слов
  • Улучшенная очистка раздела заголовка WordPress и устранение проблемы с процессором cPanel
  • Форма Google как идеальная контактная форма WordPress и локальная загрузка шрифтов WordPress (советы по скорости)
  • 16 проверенных способов получить качественные обратные ссылки и лучшее обновление до PHP 7.1
  • НОВАЯ безопасная область входа в WordPress и скрытие партнерских ссылок без плагина WordPress

Советы по настройке Wordpress

Evernote — интеграция задач действительно меняет правила игры?…

Как использовать задачи Evernote, чтобы сосредоточиться. Вот вводное руководство по использованию Задач в …

10 настроек iPhone iOS, которые нужно отключить прямо сейчас!…

В этом уроке мы рассмотрим список настроек iPhone или iOS, которые вы хотели бы отключить…

iCloud Drive — не удается включить папки «Рабочий стол» и «Документы»?…

Для вас папки iCloud Drive Desktop & Documents отображаются серым цветом на MacBook Pro? Ну…

Как прекратить передачу данных аналитики в Apple — смените iPhone,…

Когда вы активируете свой iPhone, iPhone или iPad по умолчанию передает большое количество аналитических данных в…

3, 0

Как я могу добавить дату в формате ггггммдд к моему существующему имени файла?

Например, имя моего файла — test.dat, тогда я хочу, чтобы оно было test.datyyyymmdd

2 351, 6

43, 0

2 187, 25 

Почему это не сработало?

Такой ответ никому не поможет.

Какие сообщения об ошибках/выходные данные были (если были)? Какие имена файлов были до и после выполнения команд? Вы вводили команды точно так, как показано, включая правильные кавычки?

Помогите нам помочь вам.

Еще 10 обсуждений, которые могут вас заинтересовать

1. Программирование оболочки и создание сценариев

Прочитать файл и добавить его в часть файла

Здравствуйте, позвольте мне объяснить Сенарио. есть файл с именем config и в нем хранится основная программная переменная: файл main.conf содержимое: update="1" log_login="0" allow_ports="" deny_ports="21,22,23" и есть файл который имя файла ports.txt ports.txt содержимое: 25,26,27 i. (3 ответа)

Обсуждение начато: nimafire

2. Программирование оболочки и создание сценариев

Как напечатать определенную часть имени файла с датой создания файла?

Здравствуйте, ребята, у меня есть требование, где мне нужно получить общее количество файлов на основе даты создания с выбранным шаблоном имени файла. Имя файла: MobileProtocol.20171228T154200.157115.udr Я хочу получить количество файлов, созданных за каждый день, на основе поиска шаблона. найти . -тип. (7 ответов)

Обсуждение начато: sadique.manzar

3. UNIX для чайников, вопросы и ответы

Как получить часть года из даты создания файла?

Здравствуйте, гуру, мне нужно получить год из даты создания файла. при использовании ls -l он показывает только месяц, день и время. Есть ли какой-либо вариант, который я могу добавить, чтобы получить часть года? Заранее спасибо (7 ответов)

Обсуждение начато: ken6503

4. Программирование оболочки и создание сценариев

Как убрать часть даты из имени файла в скрипте?

Привет всем, мне нужно создать ссылки между двумя каталогами. иметь несколько файлов в указанном месте. Исходное расположение, например: /opt/xdm/input/ Целевое расположение, например: /opt/xdm, имена входных файлов: 1. abc_app.aus.apac.yyyymmdd.dtd 2. abcd_app.aus.apac.yyyymmdd.dtd код, который читает. (1 ответ)

Обсуждение начато: kthri_82

5. Программирование оболочки и создание сценариев

Как удалить часть файла с датой?

Здравствуйте, гуру, у меня есть имя файла: abcd.20131005.dat. Мне нужно удалить среднюю часть данных. Последнее имя должно быть abcd.dat. Заранее спасибо (2 ответа)

Читайте также: