Mit dem Befehl:
ls -la *
kann ich alle meine symbolischen Links auflisten.
Wie kann ich alle symbolischen Links entfernen, die mit einem speziellen Ordner verknüpft sind?
Zum Beispiel:
In meinem Verzeichnis usr/local/bin
Ich habe die folgenden Einträge:
lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara
Jetzt möchte ich alle Links mit dem Pfad /usr/local/texlive/
Kommentare
- Meinen Sie damit, alle mit einem Zielordner verknüpften Symlinks zu entfernen? Oder alle gefundenen Symlinks in einen bestimmten Ordner verschieben?
- @uther: Ich meine, die Links entfernen.
Antwort
Bitte lesen Sie die alternative Antwort . Es ist noch wichtiger, obwohl es zu diesem Zeitpunkt noch nicht als hoch eingestuft wurde.
Hiermit können Sie alle symbolischen Links löschen:
find -type l -delete
mit modernen find
-Versionen.
Bei älteren Suchversionen muss es möglicherweise sein:
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
Um auf ein bestimmtes Link-Ziel zu beschränken, wird davon ausgegangen, dass keiner der Pfade ein Zeilenumbruchzeichen enthält:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
oder gut formatiert
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
Die if
könnte natürlich auch eine komplexere Bedingung enthalten, z. B. das Abgleichen eines Musters mit grep
.
Auf Ihren Fall zugeschnitten:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
oder gut formatiert:
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
Kommentare
- Entfernt dieser Befehl alle Symlinks? Siehe meine Bearbeitung oben ..
- @ Marco: Ja, die ersten drei Zeilen würden. Mehr bearbeiten 🙂
- Ich würde auch eine
-print
am Ende des
Befehl, um visuelles Feedback zu erhalten.
Antwort
Mit Ein modernes find
, das -lname
unterstützt:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
sollte dies tun it.
Kommentare
- Das ist eine großartige und einfache Lösung. Ich habe getestet und es funktioniert wie ein Zauber. Danke
- Vermutlich sollte das
find /usr/local/bin
- sein. Nicht einmal modern, unbedingt. GNU
find
hatte-lname
länger als ich es gepflegt habe (seit ungefähr 2003). - @JamesYoungman: Vielen Dank! Mit modernem
find
meinte ich wirklich GNUfind
. 😉 Ich habeusr/local/bin
verwendet, weil das ' das ist, was das OP verwendet hat.
Antwort
Die find
-Lösung ist großartig.
Nur für den Fall, dass Ihr Fund nicht funktioniert Unterstützung -lname
, hier ist eine andere Möglichkeit, die nur Shell und readlink
verwendet.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
Antwort
Mit zsh
:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
löst den Pfad vollständig zu einem symlinkfreien Pfad auf, sodass /usr/local/texlive
selbst symlinkfrei ist Es würde alle Dateien entfernen, die nach der Symlink-Auflösung unter /usr/local/textlive
leben und Links zu /usr/local/texlive/foo
, aber auch zu oder zu /usr/./local/texlive/whatever
oder zu /some/other/symlink
, das selbst ein Symlink ist, der auf /usr/local/texlive
usw.
Antwort
Gehen Sie zu Ihrem Pfad und legen Sie die Pfadkonfiguration fest.
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
Kommentare
- Da dies Pfade wie
usr/local/bin
sind, nach denengrep
sucht,grep -E
ist der richtige Weg. Andernfalls würde es keine übereinstimmenden Ergebnisse geben. Auchh
inls
erfüllt hier ' keinen Zweck!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
. Weitere Informationen finden Sie unterman ls
oderman grep
Antwort
sudo unlink /path/of/your/package
das ist es
Kommentare
- Wie werden alle symbolischen Links entfernt, die auf Ziele unterhalb des angegebenen Pfads verweisen? Beachten Sie, dass in der Frage gefragt wird, ob die symbolischen Links in einem bestimmten Verzeichnis entfernt werden sollen, die auf Ziele in einem anderen Verzeichnis verweisen.