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

12

Eu consigo RSYNC sobre SSH com sucesso, contanto que os caminhos não possuam espaços neles.

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

Quando eu uso barras, a saída informa 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 me diz que a permissão foi negada depois de inserir minha senha

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

O que posso fazer?

Obrigado.

    
O
por AndrewMRiv 16.03.2015 / 20:17

3 respostas

6

Expandindo a resposta do rzr com código de exemplo e referências, basta adicionar o -s flag, citar os caminhos e não se preocupar em escapar 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 (não -H, -A, -X)
    • Inclui:
    • -r, --recursivo, recursão em diretórios
    • -l, --links, copia links simbólicos como links simbólicos
    • -p, --perms, preservar permissões
    • -t, --times, preserva os tempos de modificação
    • -g, --group, preservar grupo
    • -o, --owner, preserve owner (somente superusuário)
    • -dispositivos, preservar arquivos do dispositivo (somente superusuário)
    • -speciais, preservar arquivos especiais
  • -v, --verbose, aumenta a verbosidade
  • -z, --compressa, compacta os dados do arquivo durante a transferência

O parâmetro adicional necessário:

  • -s, --protect-args, sem divisão de espaço, somente caracteres curingas
por binarysubstrate 01.02.2016 / 19:04
13

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

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

A origem, /path with spaces/ no shell local pode ser escapada apenas colocando aspas simples nela, ou seja, '/path with spaces/' .

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

    
por heemayl 16.03.2015 / 20:29
1

veja a opção rsync –protect-args (-s), nenhuma barra extra necessária

    
por rzr 08.06.2015 / 02:47

Tags