Znajdowanie oryginalnego pliku dowiązania symbolicznego

20

Powiedzmy, że mam dowiązanie symboliczne pliku w moim katalogu domowym do innego pliku na innej partycji. Jak znaleźć docelową lokalizację połączonego pliku? Przez to, mam na myśli, powiedzmy, że mam file2w /home/user/; ale jest to symboliczny link do innego file1. Jak mam znaleźć file1bez konieczności ręcznego przeglądania poszczególnych partycji / katalogów w celu znalezienia pliku?

k-Rocker
źródło
1
Rozwiń „oryginalny plik”. Co jeśli file1jest dowiązaniem symbolicznym file0? Czy chcesz znaleźć ostatni cel swojego dowiązania symbolicznego ( file0) czy tylko następny ( file1)?
don_crissti

Odpowiedzi:

26

Spróbuj tego :

readlink -f /path/file

(ostatni cel twojego dowiązania symbolicznego, jeśli istnieje więcej niż jeden poziom)

Jeśli chcesz tylko następnego poziomu dowiązania symbolicznego, użyj:

readlink /path/file
Gilles Quenot
źródło
nie dostaję żadnego wyjścia
k-Rocker
Powinieneś go mieć! Błąd lub ścieżka
Gilles Quenot
no nic: user@shell a5$ readlink -f ./student1.javai dostajęuser@shell a5$
k-Rocker
nvm, mój symboliczny link nie został poprawnie skonfigurowany, nie jestem pewien, dlaczego. ale zrobiłem nowy i działa, dzięki.
k-Rocker
2
FWIW readlink /path/filezwróci następny cel.
don_crissti
2

1.

ls -l bin

produkować

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

2)

file bin

produkować

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

3)

stat bin

produkować

File: «bin» -> «../Gdrive/bin/»
Costas
źródło
ok cóż, próbuję stworzyć skrypt, więc jak mam z nich korzystać? jestem nowy w systemie Linux.
k-Rocker
1
@ k-Rocker Jeśli wyjaśnisz, co zamierzasz zrobić, byłoby lepiej.
Koszt
1

Najprostszy sposób: cddo miejsca, w którym znajduje się dowiązanie symboliczne i wykonaj, ls -laby wyświetlić szczegóły plików.

Część po prawej stronie ->po dowiązaniu symbolicznym jest miejscem docelowym, na które wskazuje.

Dawny:

lrwxrwxrwx 1 nazwa_użytkownika nazwa_grupy 22 stycznia 17 13:29 Link do temp.txt -> /home/user/temp.txt

Mamy tutaj „Link do temp.txt”, który wskazuje na ( ->) „/home/user/temp.txt”.

Ale, jak wskazuje @Gilles Quenot , możesz to zrobićreadlink -f /path/to/symbolic_link

Gabriel Staples
źródło
0

Rozszerzanie na Costas

Załóżmy, że masz

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

W skrypcie możesz to zrobić (użyj backsticksa)

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

Więc masz

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
źródło
0

Inną metodą (na którą wcześniej nie udzielono odpowiedzi) w celu znalezienia plików linków jest użycie poniższego polecenia,

file -h <path_to_dir>/* | grep link

Polecenie :

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

Wyjście :

/ home / prateek / Music: symboliczny link do / media / prateek / HD-E1 / Music

Prateek Joshi
źródło