
Я сделал этот простой скрипт:
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
У меня проблема с последней строкой скрипта. Команда rm не работает, она не удаляет файл. Дата "2 часа назад" отлично работает, так что проблема не в этом.
решение1
Похоже, вы указываете имя файла двумя разными способами:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
Выше, например, есть _ между годом и часом.
Но сгенерированная вами дата имела другой формат:
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
Однако это все равно не решит изначальной проблемы получения «даты».более или менеедва часа назад», потому что переход от 13:00:00 до 12:59:59 занимает одну секунду, что в любом случае не соответствует шаблону «2017-11-20_13*».
Я бы рассмотрел возможность использования find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
следует уничтожить все файлы *.tar в текущем каталоге старше двух часов (используйте +119, чтобы получить отсрочку в одну минуту). Также вы можете пропустить -delete
при проверке работоспособности этого подхода.
решение2
Я считаю, что проблема в расширении переменной $DATE
в последней строке. Чтобы проверить это, вы можете просто добавить echo
перед rm
командой и запустить скрипт, или вы можете попытаться предотвратить проблему, используя ${DATE}
вместо просто $DATE
в rm
команде.
Проблема также может заключаться в том, что вы пытаетесь удалить несуществующее имя файла, поскольку у вас, по-видимому, указаны два разных формата вывода даты, и я предполагаю, что форматы даты должны совпадать между созданием tar-файла и удалением два часа спустя.