В первом случае вы указываете два файла в качестве цели копирования, оба находятся на 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"'
работает так же хорошо.