Как добавить дату к имени файла
Обновлено: 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 ответа)
Читайте также: