Назад | Перейти на главную страницу

Удаление всех папок старше указанной даты, кроме некоторых из них

Мне пришлось выполнить задание сценария в bash, чтобы удалить все каталоги в пути, которые старше указанной даты, за исключением некоторых из них. я знаю названия каталогов, которые нельзя удалять ...

Вы можете помочь мне???

извини, но я новичок ...

большое спасибо!

Должно быть, это день моей находки.

find /yourpath -mmin +60 -type d -not \( -name dirname1 -o -name dirname2 \) -print0 | xargs -0 rm -r

найдет и удалит все каталоги старше 60 минут (адаптировать соответственно), которые не имеют имени dirname1 или dirname2. Вы можете расширить этот список дополнительными -o name dirname части. Также я настоятельно рекомендую заменить rm -r часть с эхом для тестирования.

попробуйте tmpwatch с параметрами исключения -x и -X

man tmpwatch для получения дополнительной информации.

Я сам никогда не использовал его с исключениями, поэтому не могу привести примеры, но я уверен, что это сработает.

Для GNU find:

find . ! -newermt 2010/10/01 -type d -regextype posix-egrep ! -regex '^.*/(foo|bar|baz)/?.*' -exec echo rm -rf {} +

Это найдет и удалит каталоги старше указанной даты, которые не соответствуют регулярному выражению. Измените "foo" и т.д., чтобы они соответствовали именам ваших каталогов. Разделите каждое имя с помощью |. Удалить echo когда вы закончите тестирование. Время модификации проверено, изменить на -newerat чтобы вместо этого проверить время доступа.