$group->{$label}->{pos1}
всегда определяется, Вы inizialized это со строкой 6:
pos1 => 1e10,
так, чтобы, это работало правильно до $pos1 <= 1e10
. Если Вы хотите минимальное значение печати $group->{$label}->{pos1} = 3512970000000
(как Ваш демонстрационный вход), Вы должны inizialize $group->{$label}->{pos1} = -1
(строка 6):
pos1 => -1,
и измените строку 13 с:
$group->{$label}->{pos1} = $pos1 if (($group->{$label}->{pos1} < 0) || ($pos1 < $group->{$label}->{pos1}));
Нет, в rsync
нет возможности указать несколько пунктов назначения. Вам нужно будет вызвать команду несколько раз. Если у вас много целей, вы можете подумать об использовании вместо этого сетевой файловой системы - возможно, это лучше подходит для вашей проблемы.
Оказывается, есть программа, которая это разрешает, только не оригинальная программа rsync. Она называется pssh (параллельный ssh, я полагаю)
Одна из особенностей:
"-- Параллельная rsync (parallel-rsync, upstream называет ее prsync), эффективно копирует файлы на несколько хостов параллельно"
. - http://www.ubuntugeek.com/execute-commands-simultaneously-on-multiple-servers-using-psshcluster-sshmultixterm.html
Несмотря на то, что вы вызываете команду несколько раз через ввод файла, это можно сделать, указав нужные места назначения в одном нужном файле:
while read in; do rsync -av /Path/of/Source/Synced.file "$in":/Path/of/Destination/Synced.file; done < destinations.txt
Прошу прощения за мой тест, так как в то время у меня было доступно только две системы, но я уверен, что это будет работать для нескольких систем, как хотелось бы. Я полагаю, что это не самый элегантный метод, но это определенно один из способов автоматизации. И, пожалуйста, не стесняйтесь исправлять меня, если это не сработает, поскольку на данный момент у меня нет ресурсов для тестирования более двух систем.