Как удалить каталог, с которым связывается символьная ссылка плюс символьная ссылка?

/dev/fd и /proc/self/fd точно то же; /dev/fd символьная ссылка на /proc/self/fd. /proc/self/fd часть большей схемы, которая выставляет дескриптор файла всех процессов (/proc/$pid/fd/$number). /dev/fd существует на других нельдах и обеспечивается в соответствии с Linux для совместимости. /proc/*/fd характерно для Linux.

4
31.05.2011, 13:03
3 ответа

Судя по всему, мне нельзя комментировать,так вот как ответ :Поскольку aявляется ссылкой, нам нужна рекурсивная опция для разыменованного каталога...

rm -rf "$(readlink -f "a")"; rm -f "a"
6
27.01.2020, 20:50

Мое текущее решение

rm -rf "$(readlink -f "a")"; rm -f "a"

Но возможно существует что-то более легкое?

2
27.01.2020, 20:50
  • 1
    Ничто более легкое, необходимо удалить символьную ссылку и каталог отдельно. Я сильно убеждаю Вас использовать readlink -f там, главным образом потому что, если a на самом деле имеет компоненты каталога (foo/bar), $(readlink a) относительно местоположения, где ссылка (foo). И не забывайте к двойной кавычке всю переменную и управляйте заменами. Кроме того, Вам не нужно -r удалить символьную ссылку. Таким образом: rm -f "$(readlink -f "a")"; rm -rf "a" –  Gilles 'SO- stop being evil' 31.05.2011, 13:06
  • 2
    @Gilles: положительные стороны, отредактировал их в, спасибо –  Tobias Kienzler 31.05.2011, 14:11
  • 3
    @Gilles: Как Cruisen просто заметил (после шести лет), Вы помещаете r на неправильной команде. –  Scott 25.09.2017, 08:09
  • 4
    @Scott спасибо за примечание, я никогда не замечал это... –  Tobias Kienzler 25.09.2017, 09:19

Некоторые системы разыменуют символьную ссылку, когда Вы добавите запаздывающую наклонную черту (по крайней мере, если символьная ссылка указывает на каталог):

mkdir -p b/c && touch b/c/foo && ln -s b/c a

rm -rf a/ && rm -f a
# removed "b/c" and "a"

Стандарт POSIX изменился немного (см. Разрешение Пути в Станд. IEEE 1003.1, 2004 Выпуск по сравнению со Станд. IEEE 1003.1-2008), но это походит на поведение для пути с запаздывающей наклонной чертой и заключительного пути компоненты, который является символьной ссылкой, (главным образом) то же: символьная ссылка разрешена.

Не все системы реализуют это поведение хотя (см. комментарий Gilles).

1
27.01.2020, 20:50
  • 1
    Это не работает над многими системами. GNU coreutils 8.5 запутывается относительно природы a/ (rm: cannot remove `a': Not a directory), и если Вы явно указываете a/. это понятно не может справиться (rm: cannot remove directory: `a/.'). OpenBSD просто рассматривает a/ как a (rm -r a/ удаляет символьную ссылку). –  Gilles 'SO- stop being evil' 01.06.2011, 11:15
  • 2
    @Gilles: (измененный “многие” на “некоторых”); неудачно, что readlink (1) является также не портативным (особенно его опции). –  Chris Johnsen 01.06.2011, 11:36

Теги

Похожие вопросы