Попытка условно выбрать, какие расширения файлов должны получить scp'd, не отправляя их все?Нет проблем, вы - шаг в правильном направлении!Однако давайте взглянем на то, что делала ваша оригинальная команда ...
$scp '/tmp/*.{xml,crt,jks}' user@<destination server>
Хорошо, так с точки зрения команды,
"Я собираюсь запустить scpи затем найдите завершающий символ '
и обработайте внутреннее как литерал. Я вижу, что мы будем искать файлы в / tmp и возьмем файл с именем *. {xml, crt, jks}. Я вижу окончание'
Итак, литерал завершен, теперь я перенесу его на переданный сервер. "
Неудивительно, что команда завершилась неудачно, поскольку у вас, вероятно, нет файлов с именем *.{xml,crt,jks}
в вашей папке /tmp
.Вы не ошиблись при использовании {}
в соответствии с документацией по подстановочным знакам , однако проблема, с которой вы столкнулись, была простой ошибкой - литералы блокировали расширение оболочки.Использование ''
привело к тому, что ввод был обработан как фактический литерал, тем самым устраняя необходимость в bash для расширения этих подстановочных знаков и условного выполнения вашей операции.Поэтому истинная команда ...
Я предлагаю прочитать больше о расширениях оболочки и провести дополнительные исследования по получению переменных или расширяемых терминов в кавычках или литералах, если вы хотите сохранить ''
и все еще имеют переменные термины.