Как проверить, возвращает ли rmdir EEXIST или ENOTEMPTY? - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь написать bash-скрипт, который запрашивает каталог, а затем, после подтверждения, удаляет каталог.Мне также нужно, чтобы он сообщал пользователю, не является ли каталог пустым, и спрашивал, хотят ли они его удалить в любом случае.

Я решил использовать rmdir и проверить возвращаемое значение, чтобы убедиться, что каталог удален, иесли не почему, но до сих пор я понятия не имею, какое возвращаемое значение равно EEXIST или ENOTEMPTY.Пока единственное возвращаемое мной значение ошибки - 1.

Каким должно быть возвращаемое значение, если в каталоге есть файлы?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Делайте это в отдельных проверках.Не идеально, но начало

if [ ! -e "$DIR" ]
then
    echo "ERROR: $DIR does not exist" >&2
elif [ ! -d "$DIR" ]
then
    echo "ERROR: $DIR is not a directory" >&2
elif [ ! -r "$DIR" ]
then
    echo "ERROR: $DIR cannot be read" >&2
elif [ $(ls -a $DIR | wc -l) -gt 2 ]
then
    echo "ERROR: $DIR is not  empty" >&2
else
    rmdir $DIR
fi

ПРИМЕЧАНИЕ: rmdir все еще может быть неудачным.На ум приходит следующее: у вас нет разрешения на запись в родительский каталог $DIR.

0 голосов
/ 22 марта 2012

Вы можете попробовать с этим кодом:

#!/bin/bash

check_path() {
        if [ "x$1" = "x" ]
        then
                echo "ERROR: You have to specify a valid path."
                exit 1
        fi

        if ! [ -d "$1" ]
        then
                echo "ERROR: The specified path does not exists or it's not a directory"
                exit 1
        fi

        X="`find \"$1\"  -maxdepth 1 | tail -n 2 | wc -l`"
        if [ $X -gt 1 ]
        then
                X="R"
        else
                X=""
        fi

        while [[ "x$X" != "x" && ("x$X" != "xs" && "x$X" != "xn") ]]
        do
                echo "The specified path ($1) is not empty. Are you sure you want to delete it anyway? (S/n)"
                stty -echo
                read X
                stty echo
        done
        if [ "x$X" == "xn" ]
        then
                echo "Operation interrupted by the user."
                exit 0
        fi
}

echo -n "Please insert the path to delete: "
stty -echo
read DIRNAME
stty echo
echo

check_path "$DIRNAME"

echo "Removing path $1"
echo rm -fr "$DIRNAME"

HTH

...