Rsync sobre caminho SSH com espaços não funciona com aspas

17

Consigo fazer o RSYNC com êxito através do SSH, desde que os caminhos não tenham espaços neles.

Quando o caminho tem espaços, ele não funciona. Tentei barras, aspas e aspas duplas.

Quando uso barras, a saída afirma que é um sucesso, mas não vejo nenhum arquivo transferido.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Quando uso aspas simples ou duplas, ele diz que a permissão é negada após a digitação da minha senha

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

O que eu posso fazer?

Obrigado.

AndrewMRiv
fonte

Respostas:

12

Expandindo a resposta do rzr com exemplos de código e referências, basta adicionar o -ssinalizador, citar os caminhos e não se preocupar com a fuga de espaços no caminho remoto:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Para referência, as opções especificadas pelo OP:

  • -a, modo de arquivamento, igual a -rlptgoD (sem -H, -A, -X)
    • Inclui:
    • -r, --recursive, recursão em diretórios
    • -l, --links, copia links simbólicos como links simbólicos
    • -p, --perms, preserva permissões
    • -t, - times, preserva os tempos de modificação
    • -g, --group, preserve group
    • -o, --owner, preservar proprietário (somente superusuário)
    • -devices, preservar arquivos do dispositivo (somente superusuário)
    • -especials, preserva arquivos especiais
  • -v, --verbose, aumenta a verbosidade
  • -z, --comprime, compacta os dados do arquivo durante a transferência

O parâmetro adicional necessário:

  • -s, --protect-args, sem divisão de espaço, apenas caracteres curinga
binarysubstrate
fonte
13

Você precisa escapar de espaços no shell local e no shell remoto. Tente o seguinte:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

A fonte, /path with spaces/no shell local, pode ser escapada apenas colocando aspas simples em torno dele, isto é '/path with spaces/'.

Por outro lado, no caso do destino, o shell local é escapado colocando aspas simples e os espaços são escapados no shell remoto usando o caractere de escape ( \) na frente dos espaços.

heemail
fonte
3
Apenas para enfatizar - você precisa de duas aspas e barras invertidas.
Sridhar Sarnobat
1

veja a opção rsync –protect-args (-s), sem barras extras necessárias

rzr
fonte
11
Sua resposta seria muito melhorada se você desse um exemplo que o usuário iniciante pudesse seguir. Obrigado!
Elder Geek