В моей ситуации есть 2 каталога: /blah /d01 и /blah /d02
$ls -l /blah/d01
a/
b/
c/
fa -> a
fb -> b
fc -> c
и я хочу скопировать fa, fb, fc в /blah /d02, и в результате:
$ls -l /blah/d02
fa -> ../d01/a
fb -> ../d01/b
fc -> ../d01/c
Дело в том, что я хочу сделать что-то вроде cp - {некоторый магический атрибут} /blah /d01 /f * /blah /d02 /, чтобы это произошло.
Спасибо
ОБНОВИТЬ
Я остановился на bash-скрипте:
#! /bin/bash
for i in $@; do echo $i && [ -L $i ] && ln -s $(dirname $i)/$(readlink $i) $(basename $i); done
которые создают новые ссылки на основе старых (убедитесь, что они используют относительный путь)
ОБНОВЛЕНИЕ СНОВА
Я обнаружил, что мой последний скрипт работает, но путь ссылки будет неуклюже длинным (заполненным странными относительными путями) после копирования символических ссылок из a в b и из b в c, поэтому я добавил что-то для очистки относительного пути, и сценарий заканчивается:
#! /bin/bash
function relpath {
source=$1
target=$2
common_part=$source
back=
while [ "${target#$common_part}" = "${target}" ]; do
common_part=$(dirname $common_part)
back="../${back}"
done
echo ${back}${target#$common_part/}
}
for i in $@; do echo $i && [ -L $i ] && ln -s $(relpath $PWD $(readlink -f $i)); done