Я написал в bash функцию, которая получает * в качестве входных данных и, следовательно, должна перечислять все файлы в этом конкретном каталоге. но не Вот что я написал:

    # a function that mass deletes files in a directory but asks before deleting
    yrm()
    {
    echo "The following files are going to be deleted:"
    ls "${1}"
    read -e -n 1 -p "Do you want to delete these files? Y/n" ANSWER
    ${ANSWER:="n"} 2> /dev/null 

    if [ $ANSWER == "Y" ]
        then
            rm $1
        else
            echo "aborted by user"

    fi

}

Однако я проверил это с этими файлами:

l1zard@Marvin:~/.rclocal/test$ ls *
test1.txt  test2.txt  test3.txt  test5.txt  test7.txt  test8.txt  test9.txt  testm7m767.txt

и я получаю этот вывод из моей функции:

l1zard@Marvin:~/.rclocal/test$ yrm *
The following files are going to be deleted:
test1.txt
Do you want to delete these files? Y/nn
aborted by user

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

2 ответа2

2

попробуйте что-то вроде:

ls "$@"
read ...
if [ "${ANSWER:=n}" = Y ]
then
  rm "$@"

Но вам также необходимо проверить, были ли указаны файлы и существуют ли они.

0

Теперь функция выглядит так, и она работает благодаря Scrutinizer:

# a function that mass deletes files in a directory but asks before realy delting those
yrm()
{
echo "The following files are going to be deleted:"
ls "$@"
rm -rI "$@"
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .