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 [email protected]:/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 [email protected]:/media/New\ Volume/lj /home/pratheep

mas ainda estou recebendo o mesmo erro.

Alguém pode me dizer como corrigi-lo?

pradeepchhetri
fonte

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 [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 guia

scp -r -P 8484 [email protected]:/media/New\\\ Volume/lj /home/pratheep
enzotib
fonte
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 [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 executar 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
Gilles 'SO- parar de ser mau'
fonte