/dev/fd
и /proc/self/fd
точно то же; /dev/fd
символьная ссылка на /proc/self/fd
. /proc/self/fd
часть большей схемы, которая выставляет дескриптор файла всех процессов (/proc/$pid/fd/$number
). /dev/fd
существует на других нельдах и обеспечивается в соответствии с Linux для совместимости. /proc/*/fd
характерно для Linux.
Судя по всему, мне нельзя комментировать,так вот как ответ :Поскольку a
является ссылкой, нам нужна рекурсивная опция для разыменованного каталога...
rm -rf "$(readlink -f "a")"; rm -f "a"
Мое текущее решение
rm -rf "$(readlink -f "a")"; rm -f "a"
Но возможно существует что-то более легкое?
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
r
на неправильной команде.
– Scott
25.09.2017, 08:09
Некоторые системы разыменуют символьную ссылку, когда Вы добавите запаздывающую наклонную черту (по крайней мере, если символьная ссылка указывает на каталог):
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).
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