Мне пришлось выполнить задание сценария в 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
чтобы вместо этого проверить время доступа.