1

Чтобы передать файл из терминала Linux в систему Windows, следующие два примера работают просто отлично.

scp /home/user.name/file.html user.name@local.ip.num:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test_folder/file.html"

Мне нужно сделать это, когда в локальной папке есть пробелы, и я не могу изменить имя, скажем /C:/Users/user.name/test folder/

Все перечисленные ниже ошибки с сообщением scp: ambiguous target

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\\\ folder/file.html'"

Как мне заставить это работать?

2 ответа2

2
  • Попробуйте использовать quotes ' или Double quotes " вокруг полного аргумента.

    Как предложено @dirkt в комментариях, стоит указать полный аргумент пути для хоста ssh. Это делает вашу команду такой:

    scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test folder/'
    
  • Используйте escape sequence for space между именами папок.

    Вы можете использовать \ (обратную косую черту с пробелом), которая является escape-последовательностью для пробела. Это делает вашу команду такой:

    scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test\ folder/'
    

    Обратите внимание на \ с пробелом между test & folder что делает его test\ folder.

  • Это может быть тот случай, когда вам need to escape twice как он сбежал сначала локально, а затем на удаленном конце. В этом случае вы можете написать так:

    1. "'complete argument'" внутри кавычек в двойных кавычках:

      "'user.name@local.ip.num:/C:/Users/user.name/test folder/'"
      

      ИЛИ ЖЕ

    2. Избегайте пробелов и приводите полный аргумент так:

      'user.name@local.ip.num:/C:/Users/user.name/test\ folder/'
      

      ИЛИ ЖЕ

    3. Побег дважды, используя escape-последовательность

      user.name@local.ip.num:/C:/Users/user.name/test\\ folder/
      

Не стесняйтесь добавлять дополнительные детали.

0

"Символ интерпретируется сам Баш. Bash декапсулирует все, что между промежуточными, если это возможно, и просто представляет outout команде, вызываемой как строка, которая может иметь некоторые специальные символы. Попробуйте использовать символ апострофа ('), поскольку он заставляет bash вообще не смотреть на строку и просто передавать ее команде, которая была вызвана первой. Эти строки с ' должны быть отформатированы следующим образом: Если вы хотите увидеть

не

echo $'dont\'t'

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