Localizando o arquivo original de um link simbólico

20

Então, digamos que eu tenho um link simbólico de um arquivo no meu diretório pessoal para outro arquivo em uma partição diferente. Como eu encontraria o local de destino do arquivo vinculado? Por isso, quero dizer, vamos dizer que tenho file2em /home/user/; mas é um link simbólico para outro file1. Como eu encontraria file1sem ter que passar manualmente por cada partição / diretório para encontrar o arquivo?

k-Rocker
fonte
11
Por favor, expanda "arquivo original". E se file1for um link simbólico file0? Deseja encontrar o último destino do seu link simbólico ( file0) ou apenas o próximo ( file1)?
111314 don_crissti

Respostas:

26

Tente o seguinte:

readlink -f /path/file

(último destino do seu link simbólico, se houver mais de um nível)

Se você deseja apenas o próximo nível de link simbólico, use:

readlink /path/file
Gilles Quenot
fonte
Im obtendo nenhuma saída
k-Rocker
Você deveria ter um! Erro ou caminho
Gilles Quenot 12/11
sem nada: user@shell a5$ readlink -f ./student1.javae eu recebouser@shell a5$
k-Rocker
NVM, meu link simbólico não estava configurado corretamente, não sei por quê. mas eu fiz um novo e funciona, obrigado.
k-balancim
2
O FWIW readlink /path/fileretornará o próximo alvo.
31514 Don -crissti
2

1

ls -l bin

produzir

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

2)

file bin

produzir

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

3)

stat bin

produzir

File: «bin» -> «../Gdrive/bin/»
Costas
fonte
ok, bem, estou tentando criar um script, então como eu os utilizaria? sou novo no linux.
k-balancim
11
@ k-Rocker Se você explicar o que pretende fazer, seria melhor.
Costas
1

Maneira mais simples: cdpara onde o link simbólico está localizado e faça ls -lpara listar os detalhes dos arquivos.

A parte à direita ->após o link simbólico é o destino para o qual está apontando.

Ex:

lrwxrwxrwx 1 userName groupName 22 de janeiro 17 13:29 Link para temp.txt -> /home/user/temp.txt

Aqui temos "Link para temp.txt" que aponta para ( ->) "/home/user/temp.txt".

Mas, como @Gilles Quenot aponta , você também pode fazerreadlink -f /path/to/symbolic_link

Gabriel Staples
fonte
0

Expandindo Costas

Suponha que você tenha

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

Em um script, você pode fazer (usar backticks)

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

Então você tem

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
fonte
0

Outro método (que não foi respondido anteriormente) para encontrar arquivos de link é usar o comando abaixo,

file -h <path_to_dir>/* | grep link

Comando :

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

Saída :

/ home / prateek / Música: link simbólico para / mídia / prateek / HD-E1 / Música

Prateek Joshi
fonte