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


9

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

scp -r -P 8484 root@172.31.72.103:/media/New Volume/lj /home/pratheep

Eu 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 barra invertida extra como

scp -r -P 8484 root@172.31.72.103:/media/New\ Volume/lj /home/pratheep

mas ainda estou recebendo o mesmo erro.

Alguém pode me dizer como corrigi-lo?

Respostas:


18

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

scp -r -P 8484 root@172.31.72.103:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 root@172.31.72.103:'"/media/New Volume/lj"' /home/pratheep

ou usando a ajuda da conclusão da guia

scp -r -P 8484 root@172.31.72.103:/media/New\\\ Volume/lj /home/pratheep

3
É útil notar que scpusa sshcomo seu transporte o que explica por que existem duas passagens na interpretação do shell.
RSU

1

scpe rsyncpasse nomes de arquivos remotos para o shell remoto. Isso permite que você passe padrões, como em

scp remotehost:'*.txt' .

mas tem a conseqüência desagradável de que você precisa de citações extras ao fornecer um nome de arquivo remoto.

Você pode passar a -sopção para rsyncproteger os nomes dos arquivos contra expansão pelo shell remoto. Mas isso ativa a expansão de curinga incorporada do rsync, então você ainda precisa citar \[?*.

Uma solução alternativa é transferir um arquivo morto:

ssh -P 8484 root@172.31.72.103 '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 executar a cópia.

mkdir mnt
sshfs -p 8484 root@172.31.72.103:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.