Удаление символической ссылки в каталог


у меня есть ссылка на важный каталог. Я хочу избавиться от этой символической ссылки, сохраняя при этом каталог за ней.

пробовал rm и вернуться rm: cannot remove 'foo'.
Я пытался rmdir и вернулся rmdir: failed to remove 'foo': Directory not empty
Затем я прогрессировал через rm -f,rm -rf и sudo rm -rf

затем я пошел искать свои резервные копии.

есть ли способ избавиться от символической ссылки, не выбрасывая ребенка с водой для ванны?

9 933

9 ответов:

# this works
rm foo
# versus
rm foo/

В принципе, вам нужно сказать ему, чтобы удалить файл, а не удалить каталог. Я считаю, что разница между rm и rmdir существует из-за различий в том, как библиотека C обрабатывает каждый.

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

если он не работает, как указано выше, а затем проверить свои разрешения. Вам нужно разрешение на запись в каталог, содержащий для удаления файлов.

используйте команду "unlink" и убедитесь, что не чтобы иметь / в конце

$ unlink mySymLink

unlink() удаляет имя из файловой системы. Если это имя было последней ссылкой на файл, и никакие процессы не открыли файл, файл удаляется, а пространство, которое он использовал, становится доступным для повторного использования. Если имя было последней ссылкой на файл, но какие-либо процессы все еще имеют открытый файл, файл будет существовать до последнего дескриптора файла обращение к нему закрыто.

Я думаю, что это может быть проблематично, если я читаю это правильно.

Если имя ссылается на символическую ссылку, Ссылка удаляется.

Если имя ссылается на сокет, fifo или устройство, имя для него удаляется, но процессы, которые имеют открытый объект, могут продолжать его использовать.

https://linux.die.net/man/2/unlink

rm должен удалить символическую ссылку.

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

использовать rm symlinkname но не включайте косую черту в конце (не используйте:rm symlinkname/). Затем вам будет предложено удалить символическую ссылку,y ответить да.

предполагая, что это на самом деле символическая ссылка,

$ rm -d symlink

Он должен понять это, но так как он не может включить скрытый код, который был предназначен для другого случая, который больше не существует, но здесь происходит все правильно.

Если rm не может удалить символическую ссылку, возможно, вам нужно посмотреть разрешения на каталог, содержащий символическую ссылку. Для удаления записи справочника, необходимо разрешение на запись в каталог, содержащий.

предполагая, что ваша установка что-то вроде: ln -s /mnt/bar ~/foo, тогда вы должны быть в состоянии сделать rm foo без проблем. Если вы не можете, убедитесь, что вы являетесь собственником foo и имеет разрешение на запись и выполнение файла. Удаление foo не трогать bar, если вы не делаете это рекурсивно.

на CentOS, просто запустите rm linkname и он попросит " удалить символическую ссылку?". Типа Y и введите, ссылка исчезнет и каталог будет в безопасности.

У меня была эта проблема с MinGW (на самом деле Git Bash) работает на сервере Windows. Ни одно из вышеперечисленных предложений не сработало. В конце концов a сделал копию каталога в случае, если затем удалил мягкую ссылку в Проводнике Windows, а затем удалил элемент в корзине. Она завывала, как он был удаляя файлы, но не. Хотя сделать резервную копию!