Скрипт для рекурсивного удаления каталога CVS на сервере - PullRequest
18 голосов
/ 25 августа 2009

Пока я придумал это:

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

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

Кроме того, как я могу сделать это сценарием, в котором я могу указать каталог для очистки?

Ответы [ 2 ]

14 голосов
/ 25 августа 2009

Ну, очевидное предостережение: он удалит каталоги с именем 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
⋮

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

3 голосов
/ 25 августа 2009

Простой способ сделать это будет:

найти. с одним именем CVS-type d | XARGS RM -rf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...