В соответствии с Linux, с помощью rename
от утилит Linux (rename.ul
под Debian и Ubuntu):
rename src dst src/1 src/2/3 # dst/2 must exist
С rename
Сценарий Perl, который Debian и Ubuntu устанавливают как prename
или rename
:
rename 's!^src!dst!' src/1 src/2/3 # dst/2 must exist
rename 'use File::Basename; use File::Path;
s!^src!dst! && mkpath(dirname($_))' src/1 src/2/3
Вот функция оболочки, которая делает то, что Вы спрашиваете за исключением порядка аргументов:
mv-preserving-structure () {
s=${1%/} t=${2%/}; shift 2
for x; do
case $x in
$s/*)
y=$t${x#$s}
mkdir -p -- "${y%/*}"
mv -- "$x" "$t${x#$s}";;
esac
done
}
mv-preserving-structure src dst src/1 src/2/3
Простое решение создает туннель между этими двумя серверами, например:
На сервере A:
ip tunnel add tunnel mode ipip remote 10.10.60.10
ip addr add 10.1.1.1/24 dev tunnel
sysctl -w net.ipv4.ip_forward=1
Последняя команда к передачам пакетов с Вашего недавно созданного туннельного устройства на Ваши виртуальные устройства Ethernet.
На сервере C
ip tunnel add tunnel mode ipip remote 10.10.51.182
ip addr add 10.1.1.2/24 dev tunnel
ip route add 192.168.0.0/16 via 10.1.1.1
В зависимости от Ваших брандмауэров между серверами Вам, вероятно, придется скорректировать некоторые правила.
Explenation: Server A
и Server B
находятся на общем сетевом сегменте, например, они могут отправить пакеты друг другу без потребности отправить пакеты на их шлюз. Это означает Server B
просто попытки непосредственно для разрешения адреса 192.168.1.1
через ARP и Server A
ответы им.
Server A
и Server C
находятся на различных сегментах сети, например, если Server C
просто просит 192.168.1.1
(это было бы Вашей командой маршрута для Server C
) это не получит ответа. Для решения этой проблемы, обычно можно указывать, как можно достигнуть определенной системы через таблицы маршрутизации, но можно только указать следующий транзитный участок. Как router Z
кажется, не знает о 192.168.0.0/24
необходимо создать туннель между этими двумя системами.
Одна маленькая дополнительная подсказка, Вы не должны создавать виртуальные устройства Ethernet, можно добавить произвольное число IP-адресов к одному сетевому устройству, например:
for first in {1..4} ; do
for second in {1..255} ; do
ip addr add 192.168.$first.$second/16 dev eth0
done
done
У Вас есть несколько опций:
Создание туннеля является, вероятно, Вашим лучшим выбором для изменения только компьютеров A и C. См. практическое руководство IP IP для шагов.
A
) или поскольку альтернатива, если эти 20 серверов находятся на том же сегменте сети, создает один туннель и использует этот сервер в качестве маршрутизатора для192.168.0.0/16
сеть. – Ulrich Dangel 27.07.2012, 22:50