No primeiro caso, você está especificando dois arquivos como destino de cópia, ambos residindo em remote.net
. Isso é claramente ambíguo, pois o programa não pode determinar onde copiar o arquivo.
Considere o exemplo de trabalho a seguir, especificando dois arquivos de origem e um destino (diretório) usando o mesmo formato:
scp '[email protected]:file1 file2' .
Isso copiará ambos file1
e file2
de example.org
para o diretório local.
Seu programa local scp
se conecta ao host remoto e inicia outra instância de scp
com um parâmetro que determina se você está transferindo arquivos de ( -f
) ou < em> para ( -t
). Você pode ver isso quando você adiciona o argumento -v
para saída detalhada. O parâmetro de origem / destino inserido ( host:file
) é dividido e a parte de nomes de arquivos é anexada simplesmente como parâmetros adicionais, especificando os arquivos a serem usados.
Ao usá-lo como fonte :
debug1: Sending command: scp -v -f -- file1 file2
Isso funciona sem problema, ele transfere vários arquivos de origem pela rede.
Ao usá-lo como sink :
debug1: Sending command: scp -v -t -- file1 file2
Isso falha, já que você pretende gravar em vários arquivos. Agora, o caminho é escapar do nome do arquivo novamente (uma vez para o shell local, uma vez para a chamada remota):
$ scp foo '[email protected]:foo\ bar'
[...]
debug1: Sending command: scp -v -t -- foo\ bar
E FWIW, scp foo '[email protected]:"foo bar"'
funciona igualmente bem.