Итак, у меня есть папка с именем Bar в каталоге Foo, которая представляет собой мягкую символическую ссылку на другую папку, расположенную в другом месте.

Я в каталоге Foo. Теперь я хочу рекурсивно удалить папку сборки.

Если я делаю rm -rf Bar, то символическая ссылка удаляется, но фактическое содержимое не удаляется. Если я сделаю rm -rf Bar/*, то содержимое Bar будет удалено из исходного местоположения (что я и хочу), но оно не слушает опцию -f. Это всегда подтверждается перед удалением. Это можно обойти?

1 ответ1

2

Первое: понять проблему:

$ rm() { /bin/rm --interactive=always "$@"; }
$ mkdir -p rmtest && touch rmtest/a rmtest/b rmtest/c rmtest/d && rm -rf rmtest
$ rm() { /bin/rm "$@" --interactive=always; }
$ mkdir -p rmtest && touch rmtest/a rmtest/b rmtest/c rmtest/d && rm -rf rmtest
/bin/rm: descend into directory 'rmtest'? y
/bin/rm: remove regular empty file 'rmtest/b'? y
/bin/rm: remove regular empty file 'rmtest/a'? y
/bin/rm: remove regular empty file 'rmtest/d'? y
/bin/rm: remove regular empty file 'rmtest/c'? y
/bin/rm: remove directory 'rmtest'? y

Это --interactive=always (или -I или -i) может быть сделано, по крайней мере, используя

а) функция
б) обычный скрипт-обертка

КСТАТИ: Это не может быть сделано с помощью псевдонима, потому что там аргумент --interactive будет первым.

Вам нужно будет проверить все это, чтобы избавиться от этого поведения, или вы можете явно вызвать, например, /bin/rm или /usr/bin/rm

Проверьте, есть ли функция оболочки rm

set | grep "^rm ()"

избавиться от этого с

unset rm

Или измените его так, чтобы сначала был интерактивный аргумент, чтобы его можно было переопределить

rm() { /bin/rm --interactive=always "$@"; }

Найдите скрипт оболочки:

which rm

или же

type -p rm

затем

file $whatever_path_was_shown

например

file /bin/rm

если это сценарий оболочки

$EDITOR /bin/rm

и переместить --interactive аргумент вперед

Если у вас нет root-доступа, спрячьте скрипт оболочки, используя функцию или псевдоним, указывающий на исходный rm

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