Если вы пытаетесь создать архив с датой в названии через терминал, но вместо успешного бэкапа получаете сообщение об отсутствии файла – не спешите переустанавливать систему. Скорее всего, проблема кроется в том, как вы формируете имя архива. Давайте разберёмся, почему команда вроде 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
не в конце флагов, что ломает всю команду.