
Я совсем новичок в bash-скриптинге и застрял на методе find из Ubuntu. Я хочу выполнить поиск /opt/
по всем папкам в папке, чтобы узнать, не старше ли они определенной даты. Если они старше, файлы в этой папке следует удалить (и саму папку тоже). Если дата все еще слишком новая, файлы трогать не следует.
Что у меня есть в коде:
find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'
Переменные содержат следующие значения:
BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine
Если переменная $DAYS_TO_KEEP
равна 2, то дата — 2014-11-25, а имя папки — 2014-11-20-daily_testmachine
папка, и ее содержимое следует удалить.
Что я делаю не так, что find не удаляет/не находит эти файлы и папки для удаления? Я не могу найти ошибку.
Примечание:если я выполню команду с точным строковым именем папки в ней, папка будет удалена. Значит, у меня что-то не так с форматом или именованием.
find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'
Чтобы было понятнее, я сделал скриншот, демонстрирующий настройку:
решение1
Моя ошибка была логической ошибкой с -mtime
. Я думал, что мой скрипт проверяет имена, но -mtime
проверяет дату создания файла. Итак, мой окончательный код:
DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;
Мне просто нужно было сделать, sudo touch -d "3 days ago" /filepath/folderToRemove
чтобы -mname
найти папкуиубедитесь, что файл достаточно старый, чтобы его можно было удалить. Так что этот окончательный код удаляет все папки, которые старше моей переменной$DAYS_TO_KEEP