Calculating the target of a symlink

Sam Varshavchik mrsam at
Sun Jun 20 02:34:14 UTC 2010

Patrick O'Callaghan writes:

> 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?

Yes, you did. The description of the -L option reads:

       -L, --dereference
              when showing file information for a symbolic link, show informa-
              tion for the file the link references rather than for  the  link

Here "file information" means attributes like the modification time, the 
inode number, and such. A symbolic link has its own modification time, and 
inode number, that's separate from the referenced file's modification time 
and inode number. Normally, 'ls' shows you the symbolic link's "file 
information". The -L option displays, instead, the referenced's file's 

>                                          Is there a bug? And is there a
> better way of doing this?

If you want to read the contents of a symbolic link, from a shell script, 
use the "readlink" command.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
Url : 

More information about the users mailing list