Visit Our UNIX and Linux User Community


Moving the target of a symbolic link


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Moving the target of a symbolic link
# 1  
Old 04-04-2015
Moving the target of a symbolic link

Hello all,

On a Solaris box, I am trying to move the target of a symbolic link.

Let's say the symbolic link looks like the following:
/dir1/dir2/link -> /some/dir/target

I would like to know of a simple way to move the target of the symbolic link and not the link itself. I'd like to move /some/dir/target to /some/dir/target_v01 using the symbolic link as an argument to a command, if possible.

Using the mv command like below results in renaming the symbolic link and this is not the desired behavior in my case:

Code:
mv /dir1/dir2/link /dir1/dir2/target_v01

...will result in the rename of the symbolic link:

Code:
/dir1/dir2/target_v01 -> /some/dir/target

Thank you!
# 2  
Old 04-04-2015
Create a redirect - a second link. Rename the original physical file, or create the second file - then create a symlink named as the original file name pointed at the new file name.

Don't get carried away - there is a limit to the number of links in a path.
The error code ELOOP:

Code:
ELOOP Too many symbolic links were encountered in resolving pathname, or O_NOFOLLOW was specified but pathname was a symbolic link

.

And having lots of links for a file is a maintenance mess - ie., backups etc.

This is a great discussion about links:

symlink(7) - Linux manual page
# 3  
Old 04-04-2015
If you want to rename the target of a symbolic link, you need to actually rename that target.

Use "readlink" for that.
# 4  
Old 04-07-2015
For Solaris, have a readlink function like this:
Code:
readlink() {
  [ -h "$1" ] &&
  ls -ld "$1" | sed -n 's/.* -> //p'
}

if target=`readlink /dir1/dir2/link` && [ -f "$target" ]
then
   echo mv "$target" "$target"_v01
fi

Remove echo to really run it.
But what should happen with the dangling symlink?
# 5  
Old 04-07-2015
Only if you don't have readlink, which I know Solaris 11 does.

And even then, this is works better:
Code:
#include <unistd.h>
#include <stdio.h>
int main( int argc, char **argv )
{
    char buffer[ 32 * 1024 ];
    ssize_t result = readlink( argv[ 1 ], buffer, sizeof( buffer ) );
    if ( result > 0 )
    {
        printf( "%s\n", buffer );
        return( 0 );
    }
    return( -1 );
}

Just run
Code:
cc readlink.c -o readlink

You can add some error checking if you'd like.

Previous Thread | Next Thread
Test Your Knowledge in Computers #844
Difficulty: Medium
Bittorent, Gnutella and other distributed file transfers systems use do not user peer-to-peer, by default.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Symbolic link

Hi, trying to understand more about symblic link, when I compiled a program called "match" in one folder ~/downloadsoftware/I want this program to be accessible like a system command by putting a symbolic link in /usr/bin/ Not by setting the $PATH method in .bashrc at this time. What I did is:... (4 Replies)
Discussion started by: yifangt
4 Replies

2. Shell Programming and Scripting

How to list all symbolic link?

how to list all symbolic link can i use find / path -type l (1 Reply)
Discussion started by: avtalan
1 Replies

3. UNIX for Dummies Questions & Answers

[Solved] Symbolic link not allowed or link target not accessible

Hi everybody, I read about treads realted to this issue but they did not resovle issue given below. Please help me resolve issue given below I have html file under /srv/www/htdocs/actual_folder ls actual_folder/ test.html and following link works... (0 Replies)
Discussion started by: newbielgn
0 Replies

4. Shell Programming and Scripting

ls on a symbolic link

Hi all, Can anyone please confirm if the command below is the only way that I can get what the symbolic link is set to? mnlxd110(oracle)/db/posd2/dba$: ls -l | grep "^l" lrwxrwxrwx 1 oracle dba 28 Aug 9 2011 bdump -> diag/rdbms/posp1/posp1/trace mnlxd110(oracle)/db/posd2/dba$:... (7 Replies)
Discussion started by: newbie_01
7 Replies

5. Shell Programming and Scripting

Symbolic Link Help

Hello All, This may be a silly question to some but I am really stuck. Is there a way to reverse the following; sudo rm /bin/sh sudo ln -s /bin/bash /bin/sh It was part of a driver compile/installation procedure by Digi for Ubuntu stating that dash isn't supported and a symbolic link... (2 Replies)
Discussion started by: LAVco
2 Replies

6. Shell Programming and Scripting

symbolic link

Hi, i am trying to create sym links on sles 11 , but it seems i am doing something wrong. oracle@tests:/u01/app/oracle/oradata/ACIS> pwd /u01/app/oracle/oradata/ACIS oracle@tests:/u01/app/oracle/oradata/ACIS> ln -s /db/ACIS/dbase/dbf/ /u01/app/oracle/oradata/ACIS/... (2 Replies)
Discussion started by: tonijel
2 Replies

7. UNIX for Dummies Questions & Answers

change target of a symbolic link

Hi, Is it possible to change the target of a symbolic link? What I currently have is: /home/Data1 /home/Data2 /home/Stores In the Stores directory, I did: ln -s /home/Data1 /home/Stores/abc $ pwd /home/Stores $ ls -latr lrwxrwxrwx 1 dandy dandy 46 Feb 12 16:38 abc ->... (5 Replies)
Discussion started by: dandyrandy
5 Replies

8. UNIX for Dummies Questions & Answers

ZIP a soft / symbolic link target

Hey, How can one ZIP the target of a soft/symbolic link in unix (if dodag@ is a symbolic link for the path car/reno/*.*, how can I zip car/reno/*.*, with using only dodag as my reference)? Thxnk you. (1 Reply)
Discussion started by: galz
1 Replies

9. UNIX for Dummies Questions & Answers

need some info about symbolic link and hard link

hello folks how y'all doin well i have some questions about symbolic link and hard link hope some one answer me i open terminal and join as root and i wrote ln -s blah blah then i wrote ls i see red file called blah blah but didn't understand what is this can some one explain and... (2 Replies)
Discussion started by: detective linux
2 Replies

10. UNIX for Dummies Questions & Answers

symbolic Link

question abt symbolic link ... i'm doing the following ... ln -s x.sh ./scripts/y.sh and cat ./scripts/y.sh it is giving following error cat: cannot open y.sh Any reason u an think of ? But it is working fine when i goto scripts directory and cretae the symbolic link. ... (1 Reply)
Discussion started by: bhargav
1 Replies

Featured Tech Videos