Suppose I have a folder: /usr/lib/x86_64-linux-gnu/wxcrafter
containing some library files and their corresponding symlinks, e.g:
/usr/lib/x86_64-linux-gnu/wxcrafter/lib1.so.0 -> /usr/lib/x86_64-linux-gnu/wxcrafter/lib1.so.0.0.0
/usr/lib/x86_64-linux-gnu/wxcrafter/lib2.so.0 -> /usr/lib/x86_64-linux-gnu/wxcrafter/lib2.so.0.0.0
I want to make a copy of wxcrafter
to a new location codeblocks
, preserving the relative location of the symlink targets:
usr/lib/x86_64-linux-gnu/codeblocks/lib1.so.0 -> /usr/lib/x86_64-linux-gnu/codeblocks/lib1.so.0.0.0
/usr/lib/x86_64-linux-gnu/codeblocks/lib2.so.0 -> /usr/lib/x86_64-linux-gnu/codeblocks/lib2.so.0.0.0
How do I do this on the command line, given that there may be a number of such symlinks?
Advertisement
Answer
Use the symlinks program to convert your absolute symlinks into relative ones:
symlinks -c wxcrafter
then copy the entire directory:
cp -a wxcrafter codeblocks
If you must use absolute symlinks (but why would you?), make a copy of the original directory before running symlinks
and restore it after you’re done.
The copy (codeblocks
) will have relative links, if you need them absolute you’ll have to write a little script (using ln -fs $(pwd)/$(readlink $l) $l
to convert any symlink $l
from relative to absolute), as symlinks
only converts in one direction. But, again, why bother?