регулярное выражение / подстановочный знак в scp - PullRequest
3 голосов
/ 23 февраля 2012

Возможно ли использовать подстановочный знак в scp

Я пытаюсь достичь:

loop
{
   substitue_host (scp path/file.jar user@host:path1/foo*/path2/jar/)
}

Я продолжаю получать "scp: неоднозначная цель"

На самом деле я вызываю API с source и dest, который использует scp внизу и зацикливается на diff-хостах для размещения файлов

Спасибо!

1 Ответ

8 голосов
/ 23 февраля 2012

В общем, да, конечно, можно использовать подстановочный знак в scp.

Но в вашей команде scp второй аргумент является целью, а первый аргумент является источником.Вы, конечно, не можете скопировать источник в несколько целей.

Если вы, например, пытаетесь скопировать несколько jar-файлов, то, безусловно, сработает следующее:

scp path/*.jar user@host:path2/jar/

"ambigious target"case особо жалуется, что используемый подстановочный знак приводит к появлению нескольких возможных целевых каталогов в системе @host.

--- EDIT:

Если вы хотите скопировать в несколько каталогов наВ удаленной системе и должны определять их динамически, должен работать скрипт, подобный следующему:

 dir_list=$(ssh user@host ls -d '/path1/foo*/path2/jar/')

 for dir in $dir_list; do
     scp path/file.jar user@host:$dir
 done

Переменная dir_list будет содержать результаты выполнения ls в удаленной системе.-d означает, что вы получаете имена каталогов, а не их содержимое.Одинарные кавычки гарантируют, что расширение подстановочного знака ожидает выполнения в удаленной системе, а не в локальной системе.

И затем вы будете проходить через каждый каталог, чтобы выполнить удаленное копирование в этот каталог.

(Все это синтаксис ksh, кстати.)

...