erro de scp ao tentar copiar arquivos

4

Eu uso o scp para transferir arquivos do meu android para o meu MacBook, que funciona como um encanto. Mas eu tenho uma pasta chamada John's folder no meu MacBook então quando eu tento copiar um arquivo dentro desse diretório como scp [email protected]:/Users/macbook/desktop/John\'s\ folder/file storage/folder

Ele gera um erro

unexpected EOF error while looking for matching \'’\'

e

unexpected end of file

Como resolvo isso?

    
por nobody user 19.04.2018 / 20:20

3 respostas

3

Isso é interessante. As outras respostas que estou vendo estão dizendo para você trocar sua cota de escape e espaço de escape para uma string entre aspas. Na verdade, eles são equivalentes, então você não verá nenhuma alteração ( a\'\ b é o mesmo para o shell como "a' b" ).

O problema aqui está no modo como scp no sistema remoto interpreta a linha de comando que está sendo fornecida.

Como exemplo, isso funcionaria:

scp John\'s\ folder/file localhost:/tmp/dst

Mas isso falharia:

scp localhost:/tmp/src/John\'s\ folder/file /tmp/dst

(Eu usei localhost para o exemplo; você deve usar user@host para sua situação.)

Se você incluir o sinalizador -v ( verbose ) em scp , poderá ver exatamente o que está acontecendo que dá origem à falha:

debug1: Sending command: scp -v -f /tmp/src/John's folder/file
bash: -c: line 0: unexpected EOF while looking for matching '''
bash: -c: line 1: syntax error: unexpected end of file

A solução infeliz aqui é que você precisa escapar de caracteres especiais (incluindo espaço em branco) duas vezes - uma vez para o shell local e uma vez para o shell remoto:

scp localhost:"/tmp/src/John\'s\ folder/file" /tmp/dst
    
por 19.04.2018 / 21:38
0

O SCP precisa incluir um parâmetro inteiro entre aspas. 2 respostas diferentes antes de mim estão parcialmente corretas, mas a resposta correta é

scp "[email protected]:/Users/macbook/desktop/John's folder/file" storage/folder

Observe que o primeiro parâmetro é encapsulado entre aspas, mas não o segundo - se ambos estivessem agrupados em uma única instância de cotações como sugere um comentário, o / bin / scp invocaria isso como um único parâmetro e estaria esperando outra parâmetro depois disso.

scp "[email protected]:/Users/macbook/desktop/John's folder/file storage/folder" será lido como um único parâmetro. Mesmo que haja um espaço lá, as aspas duplas escapam disso.

Por fim, colocar as cotações no meio de um parâmetro como scp [email protected]:"/Users/macbook/desktop/John's folder/file" storage/folder corta o parâmetro ao meio e não faz sentido para o shell porque o diretório user @ host: / path / to / é um parâmetro completo. Você pode usar partes dele, mas não pode cortá-lo pela metade ou será examinado como 2 parâmetros diferentes.

    
por 19.04.2018 / 21:09
0

O escape triplo funciona para mim:

scp [email protected]:bob\\'s\\ file /local/path/

Estes também funcionam:

scp "[email protected]:bob\'s\ file" /local/path/
scp [email protected]:"bob\'s\ file" /local/path/

Estes não:

scp "[email protected]:bob's file" /local/path/
scp [email protected]:bob\'s\ file /local/path/
    
por 30.08.2018 / 07:54

Tags