До сих пор я придумал это:
find . -name 'CVS' -type d -exec rm -rf {} \;
Это работало локально к настоящему времени, кто-либо может видеть какие-либо потенциальные проблемы? Я хочу, это к в основном рекурсивно удаляет каталоги 'CVS', случайно загруженные на сервере.
Кроме того, как я могу сделать это сценарием, в котором я могу определить каталог для чистки?
Ну, очевидное предостережение: он удалит каталоги с именем CVS, независимо от того, каталоги они CVS или нет.
Вы можете довольно легко превратить его в сценарий:
#!/bin/sh
if [ -z "$1" ]; then
echo "Usage: $0 path"
exit 1
fi
find "$1" -name 'CVS' -type d -print0 | xargs -0 rm -Rf
# or find … -exec like you have, if you can't use -print0/xargs -0
# print0/xargs will be slightly faster.
# or find … -exec rm -Rf '{}' + if you have reasonably modern find
Если вы хотите сделать его более безопасным / защищенным от ошибок, вы можете сделать что-то вроде этого после первого блока if / fi (есть несколько способов написать это):
⋮
case "$1" in
/srv/www* | /home)
true
;;
*)
echo "Sorry, can only clean from /srv/www and /home"
exit 1
;;
esac
⋮
Вы можете сделать это как угодно как хотите (например, вместо прерывания он может спросить, действительно ли вы хотели это сделать). Или вы можете заставить его разрешать относительные пути, чтобы вам не приходилось всегда указывать полный путь (но опять же, может быть, вы хотите, чтобы это было безопаснее).
Простой способ сделать это:
найти. -iname CVS -type d | xargs rm -rf