Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
tote Symlinks finden

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Software
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Raphael
Gast





BeitragVerfasst am: 16. Apr 2006 8:05   Titel: tote Symlinks finden

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...
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 16. Apr 2006 11:50   Titel:

Hiermit müsste es gehen - ich übernehme aber keine Verantwortung.

Code:
#!/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
 
Benutzer-Profile anzeigen Private Nachricht senden

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 17. Apr 2006 19:12   Titel:

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!!!

Code:
find / -wholename '/proc' -prune -o -type l -print0 | xargs -0 file - | grep broken | cut -d ":" -f 1


Diese Zeile gibt die Treffer zeilenweise aus, vorrausgesetzt, man hat keine Links mit ":" als Dateinamenbestandteil.

Das kann man dann durch Anhängen von
Code:
 | xargs rm
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:
Code:
 > tote_links.datei
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:
Code:
for i in `cat tote_links.datei`; do rm "${i}"; done


Sind doch Dateinamen mit Leerzeichen dabei, muss der Internal Field Separator angepasst werden:
Code:
IF_SIK=$IFS; IFS=""; for i in `cat tote_links.datei`; do rm "${i}"; done; IFS=$IF_SIK

_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Raphael
Gast





BeitragVerfasst am: 19. Apr 2006 9:52   Titel:

Funktioniert.
Vielen Dank Smile
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Software Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy