LINUX.ORG.RU
решено ФорумAdmin

rm with wildcard (*)

 ,


0

1

Понадобилось пройтись в куче мест командой вида

rm -f /dir/K.*
Не рекурсивно удалить в директории «/dir» все файлы с именем «K, точка и всё что угодно после неё». Напрямую из консоли работает.

Мест куча, написал баш портянку. В цикле проходит по списку целевых директорий. Но ничего не удаляет. Если убрать опцию "-f" пишет:

rm: cannot remove '/dir/K.*': No such file or directory
Конечно, файлы существуют. Т.е. rm вызванный из скрипта не раскрывает звёздочку?
for dir_path in "${DIRS[@]}"
do
    if [ -d "${dir_path}" ]; then
        rm -f "${dir_path}/K.*"
    fi
done

Почему оно не раскрывает звёздочку? Как заставить раскрывать?

Ответ на: комментарий от anonymous

А потому что там в дирах не только «K.*» но и несколько других извращений и есть условия, что в одной такой-то дире надо удалить вот такие, а в другой вот те же плюс другие. Гораздо короче и понятнее написать один рм под одно извращение на одной строке, чем городить лапшу финдов.

А ты думал я выклал огрызок кода про всё что было? Я показал только проблемное место.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Гораздо короче …, чем городить лапшу финдов.

Сам то понял, чо сказал? Ты городишь кучу «велосипедов», вместо того, чтобы пользовать один find, меняя в нём только паттерны, для каждой директории.

Очнись.

anonymous ()
Ответ на: комментарий от deep-purple

Я так понял - анон предлагает написать столько вызовов find сколько вариантов. Это будет хорошо работать пока нет комбинаций вариантов, там объём кода будет расти слегка не линейно.

pon4ik ★★★★★ ()