2011-12-15 16 views
22

मेरे पास बहुत से सापेक्ष प्रतीकात्मक लिंक हैं जिन्हें मैं दूसरी निर्देशिका में ले जाना चाहता हूं।मैं एक सापेक्ष प्रतीकात्मक लिंक कैसे स्थानांतरित करूं?

सही पथ को संरक्षित करते समय मैं प्रतीकात्मक लिंक (रिश्तेदार पैथ वाले वाले) कैसे स्थानांतरित कर सकता हूं?

+0

आप अभी भी लिंक प्रतीकात्मक जब ले जाया होने के लिए करना चाहते हैं? आपके द्वारा प्राप्त उत्तरों पर इसका प्रभाव पड़ता है। – fge

+0

और क्या आप अभी भी लिंक को सापेक्ष पथों में रखना चाहते हैं, या उन्हें पूर्ण पथ में बदल रहे हैं ठीक है? –

+0

मुझे लगता है कि यह unix.stackexchange.com पर है, हालांकि superuser.com भी काम करेगा। –

उत्तर

26

आप readlink -f foo का उपयोग करके सापेक्ष पथ को पूर्ण पथ में बदल सकते हैं। तो अगर आप की तरह कुछ करना होगा:

ln -s $(readlink -f $origlink) $newlink 
rm $origlink 

संपादित करें:

मैंने देखा है कि आप पथ रिश्तेदार रखना चाहते हैं। इस मामले में, लिंक को स्थानांतरित करने के बाद, आप पूर्ण पथ को सापेक्ष पथ में वापस बदलने के लिए symlinks -c का उपयोग कर सकते हैं।

use strictures; 
use File::Copy qw(mv); 
use Getopt::Long qw(GetOptions); 
use Path::Class qw(file); 
use autodie qw(:all GetOptions mv); 

my $target; 
GetOptions('target-directory=s' => \$target); 
die "$0 -t target_dir symlink1 symlink2 symlink3\n" unless $target && -d $target; 

for (@ARGV) { 
    unless (-l $_) { 
     warn "$_ is not a symlink\n"; 
     next; 
    } 
    my $newlink = file(readlink $_)->relative($target)->stringify; 
    unlink $_; 
    symlink $newlink, $_; 
    mv $_, $target; 
} 
+0

rhel5 – reconbot

8

यह एक perl समाधान है कि संबंधित पथ को बरकरार रखता है है एक फ़ोल्डर जिसमें सापेक्ष प्रतीकात्मक लिंक होते हैं।

उदाहरण के लिए:

cd folder_to_move/.. 
tar czvf files.tgz folder_to_move 
cd dest_folder/.. 
tar xzvf /absolute/path/to/folder_to_move/../files.tgz 

# If all is fine, clean-up 
rm /absolute/path/to/folder_to_move/../files.tgz 
rm -rf /absolute/path/to/folder_to_move 
0

क्रिस्टोफर Neylan के जवाब पर में सुधार:

~/bin $ cat mv_ln 
#!/bin/bash 
# 
# inspired by https://stackoverflow.com/questions/8523159/how-do-i-move-a-relative-symbolic-link#8523293 
#   by Christopher Neylan 

help() { 
    echo 'usage: mv_ln src_ln dest_dir' 
    echo '  mv_ln --help' 
    echo 
    echo ' Move the symbolic link src_ln into dest_dir while' 
    echo ' keeping it relative' 
    exit 1 
} 

[ "$1" == "--help" ] || [ ! -L "$1" ] || [ ! -d "$2" ] && help 

set -e # exit on error 

orig_link="$1" 
orig_name=$(basename "$orig_link") 
orig_dest=$(readlink -f "$orig_link") 
dest_dir="$2" 

ln -r -s "$orig_dest" "$dest_dir/$orig_name" 
rm "$orig_link" 

यह भी https://github.com/tpo/little_shell_scripts

1

एक के हिस्से को स्थानांतरित करने के tar का उपयोग कर सकते है

+1

पर भी पुष्टि की गई एक टैर पाइप का उपयोग भी कर सकता है इसे एक कमांड में करने के लिए चेन '' cd folder_to_move; टैर सीएफ -। | (सीडी/यूएसआर/स्थानीय/dest_folder; टैर xf -) '' – Vorsprung