Finden der Originaldatei eines symbolischen Links

20

Angenommen, ich habe eine symbolische Verknüpfung einer Datei in meinem Ausgangsverzeichnis mit einer anderen Datei auf einer anderen Partition. Wie würde ich den Zielspeicherort der verknüpften Datei finden? Damit meine ich, sagen wir , ich habe file2in /home/user/; aber es ist eine symbolische Verbindung zu einem anderen file1. Wie würde ich finden, file1ohne manuell durch jede Partition / jedes Verzeichnis gehen zu müssen, um die Datei zu finden?

k-Rocker
quelle
1
Bitte erweitern Sie auf "Originaldatei". Was ist, wenn file1es einen Symlink gibt file0? Möchten Sie das letzte Ziel Ihres Symlinks ( file0) oder nur das nächste Ziel ( file1) finden?
don_crissti

Antworten:

26

Versuche dies :

readlink -f /path/file

(letztes Ziel Ihres Symlinks, wenn es mehr als eine Ebene gibt)

Wenn Sie nur die nächste Ebene der symbolischen Verknüpfung wünschen, verwenden Sie:

readlink /path/file
Gilles Quenot
quelle
Ich bekomme keine Ausgabe
k-Rocker
Du solltest einen haben! Fehler oder ein Pfad
Gilles Quenot
nein nichts: user@shell a5$ readlink -f ./student1.javaund ich bekommeuser@shell a5$
k-Rocker
nvm, mein symbolischer link war nicht richtig eingerichtet, nicht sicher warum. aber ich habe ein neues gemacht und es funktioniert, danke.
k-Rocker
2
FWIW readlink /path/filegibt das nächste Ziel zurück.
don_crissti
2

1.

ls -l bin

produzieren

lrwxrwxrwx 1 az az 14 Ноя 12 22:13 bin -> ../Gdrive/bin/

2.

file bin

produzieren

bin: symbolic link to `../Gdrive/bin/' 

3.

stat bin

produzieren

File: «bin» -> «../Gdrive/bin/»
Costas
quelle
Ok, nun, ich versuche ein Skript zu erstellen. Wie würde ich diese verwenden? Ich bin neu in Linux.
k-Rocker
1
@ k-Rocker Wenn du erklärst, was du vorhast, wäre es besser.
Costas
1

Einfachster Weg: Zu der Stelle cd, an der sich der symbolische Link befindet, und ls -lzum Auflisten der Details der Dateien.

Der Teil rechts ->nach dem symbolischen Link ist das Ziel, auf das er zeigt.

Ex:

lrwxrwxrwx 1 Benutzername Gruppenname 22 Jan 17 13:29 Link zu temp.txt -> /home/user/temp.txt

Hier haben wir "Link to temp.txt", der auf ( ->) "/home/user/temp.txt" verweist.

Aber wie @Gilles Quenot betont, können Sie dies auch einfach tunreadlink -f /path/to/symbolic_link

Gabriel Staples
quelle
0

Costas erweitern

Angenommen, Sie haben

ln -s test.txt sym_link_1.txt
ls -l sym_link_1.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 16:59 sym_link_1.txt -> test.txt

In einem Skript können Sie tun (Backticks verwenden)

ln -s `readlink sym_link_1.txt` sym_link_2.txt

Dann hast du

ls -l sym_link_*.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 16:59 sym_link_1.txt -> test.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 17:01 sym_link_2.txt -> test.txt
RWolfe
quelle
0

Eine andere Methode (die zuvor nicht beantwortet wurde), um Linkdateien zu finden, ist die Verwendung des folgenden Befehls:

file -h <path_to_dir>/* | grep link

Befehl :

file -h /home/prateek/* | grep link

Ausgabe :

/ home / prateek / musik: symbolischer link zu / media / prateek / HD-E1 / musik

Prateek Joshi
quelle