Если вы пытаетесь создать архив с датой в названии через терминал, но вместо успешного бэкапа получаете сообщение об отсутствии файла – не спешите переустанавливать систему. Скорее всего, проблема кроется в том, как вы формируете имя архива. Давайте разберёмся, почему команда вроде tar -f "backup_$(date +%D).tar.gz" -czv test2 вызывает ошибку, и как это исправить.
Почему tar не создаёт архив?
Ошибка:
tar (child): backup_02/22/25.tar.gz: Cannot open: No such file or directory
возникает не из-за отсутствия исходных файлов для архивации, а из-за некорректного имени архива. Ключевой момент здесь – символы / в названии файла.
Когда вы используете date +%D, дата выводится в формате MM/DD/YY (например, 02/22/25). Слэши система воспринимает как указание на вложенные папки. Вместо создания файла backup_02/22/25.tar.gz в текущей директории, tar пытается:
- Создать папку
backup_02 - Внутри неё – папку
22 - А уже там – файл
25.tar.gz
Поскольку этих директорий не существует, команда завершается с ошибкой. Tar не умеет автоматически создавать каталоги для выходного файла – только для распаковки.
Как правильно указать дату в имени архива
Чтобы избежать проблем с разделителями путей, замените слэши в формате даты на другие символы. Например:
date +%m-%d-%Y # 02-22-2025
date +%F # 2025-02-22 (ISO-стандарт)
date +%d_%m_%y # 22_02_25
Для исходной команды лучше всего подойдёт вариант с подчёркиваниями или дефисами. Перепишем её так:
tar -czvf "backup_$(date +%m-%d-%Y).tar.gz" test2
Пояснение флагов (на всякий случай):
-c– создать архив (create)-z– сжать через gzip-v– выводить прогресс (verbose)-f– указать имя файла (обязательно должно идти последним из флагов!)
Кстати, если вы забудете поставить -f перед именем файла, tar попытается записать архив в стандартный вывод – и вы получите сообщение tar: Refusing to write archive to terminal.
Дополнительные советы по работе с датами в архивах
1. Сортировка по имени. Формат %F (ГГГГ-ММ-ДД) удобен тем, что архивы автоматически сортируются в хронологическом порядке при просмотре через ls.
2. Добавление времени. Если вы делаете несколько бэкапов в день, используйте:
date +%F_%H-%M # 2025-02-22_14-30
3. Проверка директории. Если всё же нужно сохранить слэши в имени (хотя это редко оправдано), создайте структуру каталогов заранее:
mkdir -p "backup_$(date +%D | cut -d/ -f1-2)"
Иногда ошибки возникают из-за пробелов в именах файлов. Если дата содержит пробелы (например, date +"%A %B"), оборачивайте имя в двойные кавычки – но лучше вообще избегать пробелов в именах архивов.
Экспериментируйте с форматами через
dateбез запуска tar. Просто выполнитеecho "$(date +ваш_формат)", чтобы сразу увидеть, как будет выглядеть имя файла.
Если после исправления формата даты вы всё равно получаете ошибки – проверьте права на запись в текущую директорию (ls -ld .) и убедитесь, что в имени архива нет запрещённых символов вроде : или *. А ещё, случается, новички путают порядок аргументов: например, ставят -f не в конце флагов, что ломает всю команду.
