Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^2: create a relative symlink

by Skeeve (Parson)
on Dec 16, 2019 at 10:58 UTC ( #11110234=note: print w/replies, xml ) Need Help??


in reply to Re: create a relative symlink
in thread create a relative symlink

Thanks for asking, Dave.

The issue here is, that my script is not running in the directory where the target is. Currently the linking looks something like this

my $newname="/home/script/data/archive/currentfile";
my $targetfile="/home/script/data/archive/infofile-2019-12-16";
symlink $targetfile, $newname;

In order for the link to become relative I think I will have to do a chdir to the directory of $newname and make the path of $targetfile be relative to that.

As both are in my case, in the same directory, the relative-path part is easy, but would it be different directories, it would be a bit more complicated.

As the script is not running in the /home/script/data/archive directory, I think for symlink to create a working relative link, I need to do a chdir first. But then I need to change directory back as well.

As the ln command has a "make a relative link" option, I thought there might be something available in perl as well. So in order not to reinvent the wheel, I'm asking…


s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
+.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e

Replies are listed 'Best First'.
Re^3: create a relative symlink
by ikegami (Pope) on Dec 16, 2019 at 11:17 UTC
    my $newname="/home/script/data/archive/currentfile"; my $targetfile="infofile-2019-12-16"; symlink $targetfile, $newname;

      THANKS.

      Never thought that it's THAT easy.


      s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
      +.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e
Re^3: create a relative symlink
by soonix (Canon) on Dec 16, 2019 at 11:22 UTC
    to create a working relative link, I need to do a chdir first
    That would be the easiest way. However, it seems that you simply need to calculate the relative link (relative to the folder/directory where the symlink-to-be shall reside), e.g. with Path::Tiny->relative()
    my $newname="/home/script/data/archive/currentfile"; my $targetfile="/home/script/data/archive/infofile-2019-12-16"; # untested use Path::Tiny 'path'; my $newdir = path($newfile)->parent(); my $linktarget = path($targetfile)->relative($newdir); print ":$linktarget:\n"; symlink $linktarget, $newname;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11110234]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2020-12-02 21:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How often do you use taint mode?





    Results (47 votes). Check out past polls.

    Notices?