Ich habe einen Symlink zu einem wichtigen Verzeichnis. Ich möchte diesen Symlink loswerden und gleichzeitig das Verzeichnis dahinter behalten.
Ich versuchte es rm
und kam zurück rm: cannot remove 'foo'
.
Ich habe versucht , rmdir
und bekam wieder rmdir: failed to remove 'foo': Directory not empty
ich dann durch fortgeschritten rm -f
, rm -rf
undsudo rm -rf
Dann ging ich, um meine Backups zu finden.
Gibt es eine Möglichkeit, den Symlink loszuwerden, ohne das Baby mit dem Badewasser wegzuwerfen?
rm -r link/
löscht den Inhalt auf dem ZielThen I went to find my back-ups
- Das hat mich zum Lachen gebracht.Antworten:
Grundsätzlich müssen Sie ihm mitteilen, dass eine Datei gelöscht werden soll , nicht ein Verzeichnis . Ich glaube, der Unterschied zwischen
rm
undrmdir
besteht aufgrund von Unterschieden in der Art und Weise, wie die C-Bibliothek jeden behandelt.In jedem Fall sollte der erste funktionieren, während der zweite sich darüber beschweren sollte, dass foo ein Verzeichnis ist.
Wenn es nicht wie oben funktioniert, überprüfen Sie Ihre Berechtigungen. Sie benötigen eine Schreibberechtigung für das enthaltende Verzeichnis, um Dateien entfernen zu können.
quelle
rm -rf folderName
(ohne nachfolgendes /) ausführen, um den Symlink zu entfernen. Amazon Linux verhält sich beispielsweise unter bestimmten Umständen so.-r
mit einem Symlink verwenden, es sei denn, Sie möchten alles darin verlieren.-f
sollte auch nicht benötigt werden, außer vielleicht, um Dateiberechtigungen zu überschreiben.unlink
hat keine Beziehung zurln
AKA 'Link'-Operation. Der Nameunlink
bezieht sich auf den Vorgang des Aufhebens der Verknüpfung / Entfernung einer Datei aus der Dateitabelle des Dateisystems, sodass der Inhalt von jeglichen Verweisen auf sie getrennt wird - sie sind nicht mehr verbunden. Es ist ein verwirrender Name, der geradezu irreführend ist, wenn er insbesondere auf Links und Symlinks angewendet wird.unlink
funktioniert mit Symlinks, da es mit jeder Datei unabhängig vom Typ funktioniert .alias rm="rm -i"
haben Sie mehr Häute gerettet als alles andere da draußen, denke ich.Verwenden Sie den Befehl "Verknüpfung aufheben" und stellen Sie sicher , dass am Ende kein / steht
Ich denke, das kann problematisch sein, wenn ich es richtig lese.
https://linux.die.net/man/2/unlink
quelle
~/c/a/file
,/c/b/
mitln -s ~/c/a ~/c/b/
. In~/c/b/
,rm a/
funktioniert nicht,rm -rf a/
leert nur das Originala
.unlink a
funktioniert perfekt undunlink a/
macht nichts.unlink
ist einfach ein Alias fürrm
. Zeigt, dassrm
beim Umgang mit einem Teil Ihrer Verzeichnisstruktur die richtige Disziplin angewendet werden sollte.rm -f
wird ein Link stillschweigend gelöscht, unabhängig davon, ob er vorhanden ist oder nicht, währendunlink
bei der Erstellung des Links ein Link beanstandet wird. Es gibt keine Option -f für das Aufheben der Verknüpfung, wodurch das Skript komplexer wird.unlink
kann reguläre Dateien löschen. Es ist weniger nützlich alsrm
und nicht spezifisch für Symlinks.rm
löscht auch keine Verzeichnisse ohne-r
Flag. Ich empfehle daher, rm zu bevorzugen. Es hat Flags für ausführlich und interaktiv. sowie aussagekräftige Warn- und Fehlermeldungen.rm sollte den symbolischen Link entfernen.
quelle
Verwenden Sie,
rm symlinkname
aber fügen Sie am Ende keinen Schrägstrich ein (verwenden Sie nicht :)rm symlinkname/
. Sie werden dann gefragt, ob Sie den Symlink entfernen möchten, umy
mit Ja zu antworten.quelle
Angenommen, es ist tatsächlich ein Symlink,
Es sollte es herausfinden, aber da es nicht möglich ist, können wir den latenten Code aktivieren, der für einen anderen Fall vorgesehen war, der nicht mehr existiert, aber hier zufällig das Richtige tut.
quelle
Wenn rm einen Symlink nicht entfernen kann, müssen Sie möglicherweise die Berechtigungen für das Verzeichnis überprüfen, das den Symlink enthält. Um Verzeichniseinträge zu entfernen, benötigen Sie eine Schreibberechtigung für das enthaltende Verzeichnis.
quelle
Angenommen, Ihr Setup ist ungefähr so:
ln -s /mnt/bar ~/foo
dann sollten Sie in der Lage sein, diesrm foo
ohne Probleme zu tun . Wenn Sie dies nicht können, stellen Sie sicher, dass Sie der Eigentümerfoo
der Datei sind und über die Berechtigung zum Schreiben / Ausführen der Datei verfügen. Das Entfernenfoo
wird nicht berührtbar
, es sei denn, Sie tun es rekursiv.quelle
Führen
rm linkname
Sie unter CentOS einfach "Ausführen" aus und Sie werden gefragt, ob Sie den symbolischen Link entfernen möchten. Geben Sie Yund ein Enter, der Link wird entfernt und das Verzeichnis ist sicher.quelle
Ich hatte dieses Problem mit MinGW (eigentlich Git Bash), das auf einem Windows Server ausgeführt wurde. Keiner der oben genannten Vorschläge schien zu funktionieren. Am Ende wurde eine Kopie des Verzeichnisses erstellt, falls der Softlink im Windows Explorer gelöscht und das Element im Papierkorb gelöscht wurde. Es machte Geräusche, als würde es die Dateien löschen, tat es aber nicht. Machen Sie aber ein Backup!
quelle