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

До сих пор я придумал это:

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

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

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

18
задан meder omuraliev 25 August 2009 в 18:32
поделиться

2 ответа

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

edit

Если вы хотите сделать его более безопасным / защищенным от ошибок, вы можете сделать что-то вроде этого после первого блока if / fi (есть несколько способов написать это):

⋮
case "$1" in
    /srv/www* | /home)
        true
        ;;
    *)
        echo "Sorry, can only clean from /srv/www and /home"
        exit 1
        ;;
esac
⋮

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

14
ответ дан 30 November 2019 в 09:11
поделиться

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

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

3
ответ дан 30 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: