besteht ein link auf Datei routine
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo ich brauche eine Routine, die herausfindet ob auf eine bestehende Datei ein link existiert und dann müsste ich wissen wie der Name des oder der links heist? Wie kann man da vorgehen oder gibt es da schon einen Befehl? Gruss Reimar - -- Reimar Bauer Institut fuer Stratosphaerische Chemie (ICG-I) Forschungszentrum Juelich email: R.Bauer@fz-juelich.de - ------------------------------------------------------------------- ~ a IDL library at ForschungsZentrum Juelich ~ http://www.fz-juelich.de/icg/icg-i/idl_icglib/idl_lib_intro.html =================================================================== -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQFBobTc5aOc3Q9hk/kRAoUgAJ46K7w331Qu7PLGTvWuT9mpLrUzPgCfbwy6 TCDTw7WwbPKBWNc7blrPTPY= =21jh -----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hallo
ich brauche eine Routine, die herausfindet ob auf eine bestehende Datei ein link existiert und dann müsste ich wissen wie der Name des oder der links heist?
Elegant geht das gar nicht, weil bei einem Link nur der Link selbst weiss wohin er zeigt. Die gelinkte Datei hat keine Ahnung davon, wo sie "hingelinkt" ist. Es bleibt also mE nur "brute force": find / -type l ... usw. Es gibt auch fertige Programme auf freshmeat.net die z.B. nach ins leer zeigenden Links suchen. Eventuell kannst Du die als Vorlage benutzen.
Wie kann man da vorgehen oder gibt es da schon einen Befehl?
S.o.
Gruss
Reimar
- -- Reimar Bauer
-- HTH, Konstantin NEU +++ DSL Komplett von GMX +++ http://www.gmx.net/de/go/dsl GMX DSL-Netzanschluss + Tarif zum supergünstigen Komplett-Preis!
Am Montag, 22. November 2004 10:43 schrieb Reimar Bauer:
ich brauche eine Routine, die herausfindet ob auf eine bestehende Datei ein link existiert und dann müsste ich wissen wie der Name des oder der links heist?
Wie kann man da vorgehen oder gibt es da schon einen Befehl?
Hard Link oder Soft Link? Bei einem Hardlink kannst Du so vorgehen: ls -li datei zeigt Dir, ob ein Hard link auf diese Datei existiert (Spalte 3 zeigt die Anzahl der Verweise auf diese Datei an, muss >1 sein wenn ein Hard Link existiert). Spalte 1 zeigt Dir die I-Node an, diese ist innerhalb eines FS eindeutig. Dann kannst Du mit: find /pfad/zum/dateisystem -inum <inode> -print alle Dateien mit der gleichen I-Node suchen. Bei einem Softlink siehst Du der Datei nicht an, ob auf sie gelinkt ist. Hier bleibt nur die Suche im gesamten Verzeichnisbaum, aber auch da ist der find hilfreich: find / -lname 'datei' -printf "%p %l\n" Dies listet Dir sämtliche Dateien auf (und zwar zuerst den Pfad zum Link und dann den Inhalt des Links), die symbolische Verweise sind und auf eine Datei mit dem von Dir gesuchten Namen verweisen. Da symbolische Links sowohl relativ als auch absolut angegeben werden können, musst Du noch vergleichen, welcher der angegebenen Pfade passt. Dazu kannst Du folgendes Konstrukt benutzen: # finde alle symbolischen Links, deren Ziel "datei" ist find / -lname 'datei' -print | while read l; do # ermittle den Pfad zum Linkziel p="`readlink \"$l\"`" # wechsle zuerst in das Verzeichnis des Links, dann in das # Verzeichnis des Ziels und gib dann den Link sowie den # aktuellen Pfad aus cd "`dirname \"$p\"`" && cd "`dirname \"$l\"`" && \ echo "$l `pwd`/`basename \"$l\"`" done Damit kriegst Du den absoluten Pfadnamen des Linkziels (ich habe Probleme aufgrund fehlender Berechtigungen mal außen vor gelassen) und brauchst die nur noch mit Deinem aktuellen absoluten Dateinamen vergleichen: find ... ... done | grep " /absoluter/pfad/zu/datei$" Für nähere Infos: man ls man find man basename man dirname man readlink man grep man bash (ich weiss, das ist gemein ;-) Alles nur oberflächlich getestet. hth Jan -- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org
Am Montag, 22. November 2004 23:57 schrieb Jan Trippler: [...]
find / -lname 'datei' -printf "%p %l\n"
Kleine Ergänzung: besser Du benutzt: find / -lname '*datei' -printf "%p %l\n" Da -lname mit Shell-Pattern arbeitet, kriegst Du ansonsten nur Links, die relativ zur Datei im gleichen Verzeichnis liegen (auch in den anderen Beispielen zu ersetzen). Jan -- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org
participants (3)
-
Jan.Trippler@t-online.de
-
Konstantin Malakhanov
-
Reimar Bauer