Script для рекурсивного удаления каталога CVS на сервере

До сих пор я придумал следующее:

find . -name 'CVS' -type d -exec rm -rf {} \;

Он работал локально до сих пор, может ли кто-нибудь увидеть какие-либо потенциальные проблемы? Я хочу, чтобы это в основном рекурсивно удаляло каталоги CVS, случайно загруженные на сервер.

Также, как я могу сделать его script, в котором я могу указать каталог для очистки?

Ответы

Ответ 1

Ну, очевидное предостережение: оно удалит каталоги с именем CVS, независимо от того, являются ли они каталогами CVS или нет.

Вы можете легко превратить его в script:

#!/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
⋮

Вы можете сделать это столь же причудливым, как хотите (например, вместо прерывания, он может подсказать, действительно ли вы это сделали). Или вы можете разрешить относительные пути, поэтому вам не нужно будет всегда указывать полный путь (но опять же, возможно, вы хотите, чтобы это было безопаснее).

Ответ 2

Простым способом было бы:

найти. -iname CVS-тип d | xargs rm -rf