Encontrar el archivo original de un enlace simbólico

20

Digamos que tengo un enlace simbólico de un archivo en mi directorio de inicio a otro archivo en una partición diferente. ¿Cómo encontraría la ubicación de destino del archivo vinculado? Por esto, quiero decir, digamos que tengo file2en /home/user/; pero es un enlace simbólico a otro file1. ¿Cómo encontraría file1sin tener que pasar manualmente por cada partición / directorio para encontrar el archivo?

k-rocker
fuente
1
Por favor, expanda en "archivo original". ¿Qué pasa si file1es un enlace simbólico file0? ¿Quieres encontrar el último objetivo de tu enlace simbólico ( file0) o solo el siguiente ( file1)?
don_crissti

Respuestas:

26

Prueba esto :

readlink -f /path/file

(último objetivo de su enlace simbólico si hay más de un nivel)

Si solo desea el siguiente nivel de enlace simbólico, use:

readlink /path/file
Gilles Quenot
fuente
no obtengo salida
k-Rocker
¡Deberías tener uno! Error o un camino
Gilles Quenot
no nada: user@shell a5$ readlink -f ./student1.javay lo consigouser@shell a5$
k-Rocker
nvm, mi enlace simbólico no estaba configurado correctamente, no estoy seguro de por qué. pero hice uno nuevo y funciona, gracias.
k-Rocker
2
FWIW readlink /path/filedevolverá el próximo objetivo.
don_crissti
2

1)

ls -l bin

Produce

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

2)

file bin

Produce

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

3)

stat bin

Produce

File: «bin» -> «../Gdrive/bin/»
Costas
fuente
ok, estoy tratando de hacer un script, entonces, ¿cómo usaría estos? Soy nuevo en Linux.
k-Rocker
1
@ k-Rocker Si explicas lo que piensas hacer, sería mejor.
Costas
1

La forma más simple: cda dónde se encuentra el enlace simbólico y hacer ls -luna lista de los detalles de los archivos.

La parte a la derecha de ->después del enlace simbólico es el destino al que apunta.

Ex:

lrwxrwxrwx 1 userName groupName 22 ene 17 13:29 Enlace a temp.txt -> /home/user/temp.txt

Aquí tenemos "Enlace a temp.txt" que apunta a ( ->) "/home/user/temp.txt".

Pero, como señala @Gilles Quenot , también puedes hacerreadlink -f /path/to/symbolic_link

Gabriel Staples
fuente
0

Expandiendo en Costas

Supongamos que tienes

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

En un script que puedes hacer (usa backticks)

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

Entonces tiene

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

Otro método (que no se respondió previamente) para encontrar archivos de enlace es utilizar el siguiente comando,

file -h <path_to_dir>/* | grep link

Comando :

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

Salida :

/ home / prateek / Music: enlace simbólico a / media / prateek / HD-E1 / Music

Prateek Joshi
fuente