Удаление символической ссылки в каталог
у меня есть ссылка на важный каталог. Я хочу избавиться от этой символической ссылки, сохраняя при этом каталог за ней.
пробовал rm
и вернуться rm: cannot remove 'foo'
.
Я пытался rmdir
и вернулся rmdir: failed to remove 'foo': Directory not empty
Затем я прогрессировал через rm -f
,rm -rf
и sudo rm -rf
затем я пошел искать свои резервные копии.
есть ли способ избавиться от символической ссылки, не выбрасывая ребенка с водой для ванны?
9 ответов:
# this works rm foo # versus rm foo/
В принципе, вам нужно сказать ему, чтобы удалить файл, а не удалить каталог. Я считаю, что разница между
rm
иrmdir
существует из-за различий в том, как библиотека C обрабатывает каждый.во всяком случае, первый должен работать, а второй должен жаловаться на то, что foo является каталогом.
если он не работает, как указано выше, а затем проверить свои разрешения. Вам нужно разрешение на запись в каталог, содержащий для удаления файлов.
используйте команду "unlink" и убедитесь, что не чтобы иметь / в конце
$ unlink mySymLink
unlink() удаляет имя из файловой системы. Если это имя было последней ссылкой на файл, и никакие процессы не открыли файл, файл удаляется, а пространство, которое он использовал, становится доступным для повторного использования. Если имя было последней ссылкой на файл, но какие-либо процессы все еще имеют открытый файл, файл будет существовать до последнего дескриптора файла обращение к нему закрыто.
Я думаю, что это может быть проблематично, если я читаю это правильно.
Если имя ссылается на символическую ссылку, Ссылка удаляется.
Если имя ссылается на сокет, fifo или устройство, имя для него удаляется, но процессы, которые имеют открытый объект, могут продолжать его использовать.
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, а затем удалил элемент в корзине. Она завывала, как он был удаляя файлы, но не. Хотя сделать резервную копию!