[英]How do I move a relative symbolic link?
我有很多我想移動到另一個目錄的相對符號鏈接。
如何在保留正確路徑的同時移動符號鏈接(具有相對路徑的鏈接)?
您可以使用readlink -f foo
將相對路徑轉換為完整路徑。 所以你會做這樣的事情:
ln -s $(readlink -f $origlink) $newlink
rm $origlink
編輯:
我注意到您希望保持路徑相對。 在這種情況下,移動鏈接后,您可以使用symlinks -c
將絕對路徑轉換回相對路徑。
這是一個保留相對路徑的perl
解決方案:
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;
}
可以使用tar
移動包含相對符號鏈接的文件夾。
例如:
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
改進 Christopher 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"
當然使用ln
:
for i in *; do # or whatever pattern you're wanting to match
ln -sr "$(readlink "$i")" newdir/"$i";
done;
我很驚訝這行得通,但LN(1)
必須足夠聰明才能注意到正在發生的事情並幫助你! 我什至用../somethingelse
的“newdir”(這應該是鏈接重寫中的無操作)和..
(這將從鏈接目標中刪除..
來嘗試它,並且它工作得非常好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.