Hallo und frohe Ostern.
Kurze Frage, wie spüre ich verwaiste Symlinks im System auf ? (Debian "Etch")
Gibt es hierzu ein Tool oder eine Software die man gezielt einsetzen könnte ?
Von Hand aufspüren ist doch etwas umständlich...
tote Symlinks finden
Hiermit müsste es gehen - ich übernehme aber keine Verantwortung.
Code: Select all
#!/bin/bash
IFS="
"
for link in $(find / -type l); do
if test ! -z "$(file $link | grep broken)"; then
echo Broken Link: $link
# rm $link # Diese Zeile aktivieren, um die Links zu löschen.
fi
done
- killerhippy
- Posts: 529
- Joined: 19. May 2000 19:36
- Contact:
Das geht auch mit nem Einzeiler, man beachte, dass hier /proc ausgeklammert wird, was notwendig ist, da man in diesem Kernelsteuerungs-Pseudodateisystem nicht einfach Dateien löschen möchte und selbst wenn man die Dateien nur angezeigt bekommen möchte, sind die Angaben aus /proc überflüssig und stören nur!!!
Diese Zeile gibt die Treffer zeilenweise aus, vorrausgesetzt, man hat keine Links mit ":" als Dateinamenbestandteil.
Das kann man dann durch Anhängen von auch zum Löschen verwenden, aber das ist äusserst gefährlich und sollte man nicht tun.
Besser ist es, die Ausgabe in eine Datei umzulenken:Diese überprüfen und ggfs korrigieren. Fussfalle sind auch hier wieder Dateien mit Leerzeichen im Namen. Wenn man keine solche Dateinamen in der Trefferliste hat, kann man die Datei verwenden um zu löschen:
Sind doch Dateinamen mit Leerzeichen dabei, muss der Internal Field Separator angepasst werden:
Code: Select all
find / -wholename '/proc' -prune -o -type l -print0 | xargs -0 file - | grep broken | cut -d ":" -f 1
Das kann man dann durch Anhängen von
Code: Select all
| xargs rm
Besser ist es, die Ausgabe in eine Datei umzulenken:
Code: Select all
> tote_links.datei
Code: Select all
for i in `cat tote_links.datei`; do rm "${i}"; done
Code: Select all
IF_SIK=$IFS; IFS=""; for i in `cat tote_links.datei`; do rm "${i}"; done; IFS=$IF_SIK
Es gibt keine dumme Fragen!
Killerhippy
Killerhippy