BASH - Простой скрипт с командой rm не работает

BASH - Простой скрипт с командой rm не работает

Я сделал этот простой скрипт:

#/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-файла и удалением два часа спустя.

Связанный контент