Problema nos nomes de arquivos de cópia segura (scp) com espaços

8

Estou tentando copiar arquivos usando cópia segura (scp). Estou tentando executar o seguinte comando, mas recebo erro devido ao espaço no caminho absoluto do local do diretório.

scp -r -P 8484 [email protected]:/media/New Volume/lj /home/pratheep

Estou recebendo o seguinte erro:

scp: /media/New: No such file or directory  
scp: Volume/lj: No such file or directory

Eu tentei usar o mesmo comando colocando barras extras como

scp -r -P 8484 [email protected]:/media/New\ Volume/lj /home/pratheep

mas ainda estou recebendo o mesmo erro.

Alguém pode me dizer como corrigi-lo?

    
por pradeepchhetri 06.02.2012 / 15:03

2 respostas

17

Você deve citar seu nome de arquivo duas vezes, uma para o shell local e outra para o remoto. No caso mais simples, você pode fazer um dos seguintes

scp -r -P 8484 [email protected]:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 [email protected]:'"/media/New Volume/lj"' /home/pratheep

ou usando a ajuda da conclusão da tabulação

scp -r -P 8484 [email protected]:/media/New\\ Volume/lj /home/pratheep
    
por 06.02.2012 / 15:20
1

scp e rsync transmitem nomes de arquivos remotos para o shell remoto. Isso permite que você passe padrões, como em

scp remotehost:'*.txt' .

mas tem a consequência desagradável de que você precisa de uma cotação extra ao fornecer um nome de arquivo remoto.

Você pode passar a opção -s para rsync para proteger os nomes de arquivos da expansão pelo shell remoto. Mas isso ativa a expansão de curingas do rsync, então você ainda precisa citar \[?* .

Uma solução alternativa é transferir um arquivo:

ssh -P 8484 [email protected] 'cd "/media/New Volume" && tar cf - lj' |
tar xf - -C /home/pratheep

Outro método é montar o sistema de arquivos remoto e, em seguida, usar ferramentas comuns para realizar a cópia.

mkdir mnt
sshfs -p 8484 [email protected]:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt
    
por 07.02.2012 / 01:16