Calculating the target of a symlink

JD jd1008 at gmail.com
Sun Jun 20 02:39:35 UTC 2010



On 06/19/2010 07:05 PM, Patrick O'Callaghan was caught red-handed while 
writing::
> A script I'm writing needs to work out the target of a symbolic link,
> i.e. given:
>
> $ touch foo
> $ ln -s foo bar
>
> the function should print bar when given foo as a parameter. The manual
> says "ls -L" should do this, but it doesn't seem to work:
>
> $ touch foo
> $ ln -s foo bar
> $ ls -l foo bar
> lrwxrwxrwx 1 poc poc 3 Jun 19 21:32 bar ->  foo
> -rw-rw-r-- 1 poc poc 0 Jun 19 21:32 foo
> $ ls -L bar
> bar
>
> (should give foo)
>
> Have I misunderstood what "ls -L" does? Is there a bug? And is there a
> better way of doing this?
>
> poc
>
>    
Here's one way your script can find what a symlink points to:

$ file /usr/src
/usr/src: symbolic link to `/sdb3/src'

or

$ ls -l /usr/src
lrwxrwxrwx 1 root root 9 May 30 17:18 /usr/src -> /sdb3/src/

For example you can
ls -l /usr/src | awk '{ print $NF }'
/sdb3/src/

Good luck.




More information about the users mailing list