Вопрос

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

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

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

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

Это было полезно?

Решение

# this works
rm foo
# versus
rm foo/

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

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

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

Другие советы

используйте команду «отключить связь» и убедитесь, что нет иметь / в конце

$ 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 и он спросит «удалить символическую ссылку?».Тип Да и Входить, ссылка исчезнет, ​​а каталог будет в безопасности.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top