Por que você precisa escapar de espaços ao passar nomes de arquivos SCP?

6

Qualquer um que já tenha SCP sabe que isso provavelmente não funciona:

scp foo.txt '[email protected]:foo bar.txt'

Para mim, eu recebo: "alvo ambíguo".

A página man do SCP não explica por que você precisa escapar desse espaço, mas o argumento parece se encaixar na especificação desse argumento listado na página man:

[[user@]host1:]file1 

Parece combinar comigo. Então, por que é necessário fazer isso:

scp foo.txt '[email protected]:foo\ bar.txt'
    
por Thanatos 11.02.2013 / 23:51

1 resposta

11

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.

    
por 12.02.2013 / 00:11

Tags