find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete
Быстрый тестовый случай показал, что это работает, по крайней мере, именно в этом случае. Если есть подкаталоги, например c
или такие, я думаю, вы можете исключить их. Легко заставить его работать в общих случаях, но для определения команды поиска во всех случаях требуется некоторое тестирование.
Проверьте без оператора "-delete", чтобы увидеть, какие файлы ему соответствуют.
PRESSTOP: команда find
меняет свое поведение, если указан параметр -delete
(команда find
предупреждает об этом и не будет работать, если -prune
). Вы всегда можете передать вывод в xargs
и rm
или написать -execdir rm {} \;
вместо -delete
, хотя.
Примеры:
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r
Это всегда непростое дело, и когда цель состоит в том, чтобы удалить файлы, проведите обширные тестовые случаи. У меня довольно много похожа find
s работает по ночам, и я не могу сказать , что я не нервничал их установка бесплатно :-)