Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 14. Nov 2018 8:19

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: tote Symlinks finden
BeitragVerfasst: 16. Apr 2006 8:05 
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...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 16. Apr 2006 11:50 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 05. Mai 2004 7:35
Beiträge: 1238
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 17. Apr 2006 19:12 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 19. Apr 2006 9:52 
Funktioniert.
Vielen Dank :-)


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de