Скрипт удаления Linux - PullRequest
1 голос
/ 11 ноября 2010

Я написал сценарий оболочки (называемый Trash.sh), который при запуске отобразит все файлы в моей папке «мусорной корзины» и спросит пользователя, хотят ли они удалить каждый файл по одному. Сценарий выглядит следующим образом:

#if directory is empty, display message
if test ! -f ~/dustbin/* 
then
echo "Directory is empty"
#if directory is not empty, then display each item and ask to delete
else
for resfile in ~/dustbin/* #for each file in directory, store it in resfile variable
do
    if test -f $resfile ; then #if a file exists
    echo "Do you want to delete $resfile?"
    echo "Enter y or n"
    read ans #store user input in ans variable
    if test $ans = y ; then
    rm $resfile
    echo "File $resfile was deleted"
    fi
    fi
done
fi

Это прекрасно работает для меня. Когда пользователь вводит sh Trash.sh, скрипт будет работать нормально, каждый файл будет отображаться, и пользователю будет предложено удалить его или нет. Однако я хотел бы добавить, что пользователь может набрать sh Trash.sh -a и автоматически удалить все файлы в каталоге без подтверждения.

Я немного застрял в том, как этого добиться. Есть идеи?

ps - я использую Mac OS X 10.6.4 и делаю все через Terminal

Ответы [ 5 ]

2 голосов
/ 11 ноября 2010

Я бы также предложил использовать чистый rm для запроса на удаление:

rm -riv ~/dustbin/*

И, как указано в других ответах, удалите без вопросов:

rm -rfv ~/dustbin/*
2 голосов
/ 11 ноября 2010

Первое, с чего нужно начать, - это научиться разбирать аргументы в скриптах bash.

Короткий ответ - использовать переменные $ 1, $ 2, $ N ($ 0 - это имя сценария bash, который вы выполняете).$ * это строка, содержащая все аргументы.Вот как вы получаете аргументы в скриптах bash и в своих пользовательских функциях bash.В вашем случае простой тест, такой как

if [[ $1 == "-a" ]]
then
  #profit!
fi

. Длинный ответ - использовать и изучать getopts: http://www.mkssoftware.com/docs/man1/getopts.1.asp

2 голосов
/ 11 ноября 2010

Попробуйте:

if [ x"$1" = x"-a" ]; then
  rm -rf ~/dustbin/*;
  exit 0;
fi

вверху вашего скрипта

2 голосов
/ 11 ноября 2010

Я бы предложил захватить опцию -a с помощью getopts. Затем проверьте его позже и используйте rm -f (для принудительного использования см. Справочную страницу). Оболочка в Mac OS немного отличается от того, к чему я привык, но обработка параметров в bash в Linux выглядит примерно так:

force_all='f';
while getopts "ahv" arg
do
    case $arg in
        a) force_all='t';;
        v) echo "$SCRIPT: $VERSION"; exit;;
        h|*) echo "$SCRIPT: $HELP"; exit;;
    esac
done

В этом примере показано, как реализовать -v для версии и -h для справки.

1 голос
/ 11 ноября 2010

Проверьте, является ли $1 -a.Если это так, удалите все файлы и выйдите.

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