Нахождение исходного файла по символической ссылке

20

Допустим, у меня есть символическая ссылка файла в моем домашнем каталоге на другой файл в другом разделе. Как мне найти целевое местоположение связанного файла? Под этим я имею в виду, скажем, я file2в /home/user/; но это символическая ссылка на другого file1. Как найти file1без необходимости вручную просматривать каждый раздел / каталог, чтобы найти файл?

к-Rocker
источник
1
Пожалуйста, разверните «оригинальный файл». Что делать, если file1символическая ссылка на file0? Вы хотите найти последнюю цель вашей символической ссылки ( file0) или только следующую ( file1)?
don_crissti

Ответы:

26

Попробуй это :

readlink -f /path/file

(последняя цель вашей символической ссылки, если существует более одного уровня)

Если вы просто хотите следующий уровень символической ссылки, используйте:

readlink /path/file
Жиль Квено
источник
я не получаю выходной
k-Rocker
Вы должны иметь один! Ошибка или путь
Жиль Квено
нет ничего: user@shell a5$ readlink -f ./student1.javaи я получаюuser@shell a5$
k-Rocker
nvm, моя символическая ссылка не была правильно настроена, не знаю почему. но я сделал новый, и это работает, спасибо.
K-Rocker
2
FWIW readlink /path/fileвернет следующую цель.
don_crissti
2

1.

ls -l bin

производить

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

2.

file bin

производить

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

3.

stat bin

производить

File: «bin» -> «../Gdrive/bin/»
Костас
источник
хорошо, я пытаюсь сделать сценарий, так как бы мне использовать их? Я новичок в Linux.
K-Rocker
1
@ k-Rocker Если вы объясните, что вы собираетесь делать, было бы лучше.
Костас
1

Самый простой способ: cdтуда, где расположена символическая ссылка и сделать, ls -lчтобы перечислить детали файлов.

Часть справа от ->символической ссылки является пунктом назначения, на который она указывает.

Пример:

lrwxrwxrwx 1 userName groupName 22 янв. 17 13:29 Ссылка на temp.txt -> /home/user/temp.txt

Здесь у нас есть «Ссылка на temp.txt», которая указывает на ( ->) «/home/user/temp.txt».

Но, как отмечает @Gilles Quenot , вы также можете простоreadlink -f /path/to/symbolic_link

Габриэль Стейплс
источник
0

Расширение на Костас

Предположим, у вас есть

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

В сценарии вы можете сделать (используйте backticks)

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

Тогда у вас есть

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
источник
0

Еще один метод (на который ранее не отвечали) для поиска файлов ссылок - использовать команду ниже:

file -h <path_to_dir>/* | grep link

Команда :

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

Выход :

/ home / prateek / Музыка: символическая ссылка на / media / prateek / HD-E1 / Музыка

Пратик Джоши
источник