6

Любой, кто когда-либо знал SCP, знает, что это, вероятно, не работает:

scp foo.txt 'me@remote.net:foo bar.txt'

Для меня на этом я получаю: "неоднозначная цель".

Страница man для SCP не объясняет, почему вам нужно выходить из этого пространства, но аргумент, кажется, соответствует спецификации для этого аргумента, перечисленной на странице man:

[[user@]host1:]file1 

Кажется, чтобы соответствовать, для меня. Итак, почему это необходимо сделать:

scp foo.txt 'me@remote.net:foo\ bar.txt'

1 ответ1

11

В первом случае вы указываете два файла в качестве цели копирования, оба находятся на remote.net . Это явно неоднозначно, так как программа не может определить, куда скопировать файл.

Рассмотрим следующий рабочий пример с указанием двух исходных файлов и одного места назначения (каталога) в одном и том же формате:

scp 'me@example.org:file1 file2' .

Это скопирует и file1 и file2 из example.org в локальный каталог.


Ваша локальная программа scp подключается к удаленному хосту и запускает другой экземпляр scp с параметром, определяющим, переносите ли вы файлы из него (-f) или в него (-t). Это можно увидеть, добавив аргумент -v для подробного вывода. Введенный вами параметр источника / назначения (host:file) разделяется, а часть имен файлов просто добавляется в качестве дополнительных параметров, определяющих файлы для использования.

При использовании его в качестве источника:

debug1: Sending command: scp -v -f -- file1 file2

Это работает без проблем, он передает несколько исходных файлов по сети.

При использовании в качестве раковины:

debug1: Sending command: scp -v -t -- file1 file2

Это не удастся, так как вы собираетесь записать несколько файлов. Теперь можно обойти это имя снова (один раз для локальной оболочки, один раз для удаленного вызова):

$ scp foo 'me@example.org:foo\ bar'
[...]
debug1: Sending command: scp -v -t -- foo\\ bar

И FWIW, scp foo 'me@example.org:"foo bar"' работает так же хорошо.

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