1

У меня есть следующие файлы на сервере:

A_Hello.txt
B_Hello.txt
C_Hello.txt
A_World.txt
B_World.txt
C_World.txt
A_SU.txt
B_SU.txt
C_SU.txt
A_IDONTWANTTHISFILE.txt

Если я пытаюсь загрузить нужные файлы (все, кроме последнего):

scp me@server:/path/to/*_{Hello,World,SU}.txt

Меня спрашивают мой пароль при каждом переходе слова в фигурных скобках, поэтому:

  1. Я выполняю команду и ввожу пароль моего сервера
  2. Первые 3 файла загружаются
  3. Меня спрашивают мой пароль
  4. Следующие 3 файла загружаются
  5. Меня спрашивают мой пароль .... и т.д.

В чем причина и как я могу от нее избавиться?

1 ответ1

1

В чем причина

Расширение Bash является ответом. Ваша команда

scp me@server:/path/to/*_{Hello,World,SU}.txt

расширяется до

scp me@server:/path/to/*_Hello.txt me@server:/path/to/*_World.txt me@server:/path/to/*_SU.txt

в вашем bash , что означает, что вы создаете три отдельных подключения к одному и тому же серверу.

как я могу избавиться от этого?

Это зависит Есть больше возможностей.

  • Настройте ControlMaster так, чтобы вы выполняли все команды через одно и то же соединение:

    создать ~/.ssh/config

    Host server
    ControlPath ~/.ssh/%r@%h:%p
    ControlMaster auto
    ControlPersist 5m
    

    и затем запустите вашу любимую команду:

    scp me@server:/path/to/*_{Hello,World,SU}.txt
    
  • Используйте sftp с командным файлом, что обеспечивает большую гибкость в более сложных случаях:

    sftp -b <( echo get /path/to/*_{Hello,World,SU}.txt ) me@server
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .