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

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

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

точка лишняя

Нет не лишняя!!!

с именем «K, точка и всё что угодно после неё»

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

И вообще, ну-ка в скрипт положи и динамически строкой сформируй как у меня. Сказано ж:

из консоли работает

Ты вообще читал?

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

Всё заработало.

А почему не find? Тебе утилиты в системе вообще не нужны? Всё чисто «велосипедами» выполнить пытаешься?

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

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

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

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

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

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

Очнись.

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

Если только директории

Наоборот.

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

Еще раз - в одной дире должны отработать паттерны А и Б, в другой А, Б, и В, в третьей только В, в четвертой Б и В.

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

в другой А, Б, и В, в третьей только В

Всё именно так.

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

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

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

анон предлагает

А что предлагает ТС? («тему» смотри).

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

Это всё равно не покроет кейсы когда есть пересечение множеств действий и условий, так же компактно как императивная запись.

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

в примере да, на деле куча ветвлений по условиям, и вообще скрипт уже давно свое дело сделал.

deep-purple ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.