rsync usando a função args [closed]

3

Eu estou tentando criar uma função BASH que eu possa usar para passar argumentos para o rsync para especificar os arquivos e / ou diretórios para download. Suponha que o servidor tenha os seguintes arquivos que eu gostaria de baixar (os espaços e sublinhados são intencionais ... a parte importante é que os arquivos têm espaços neles):

dir1/file 1 with really long name.txt
dir1/file 2_with_shorter_name.txt

Atualmente, tenho o seguinte:

CMD="ssh -i~/.ssh/some_key"
LOGIN="[email protected]"

dl()
{
    rsync -Pzr --compress-level=9 -e "$CMD" "$LOGIN":"$@" ./
}

Estou tentando chamar essa função para fazer o download desses dois arquivos:

dl "dir1/file\ *"

(Eu realmente gostaria de poder passar o asterisco para a minha função dl para que ele possa ser passado através do rsync para o servidor)

Mas o rsync sai com o seguinte erro:

receiving incremental file list
rsync: link_stat "/home/user/dir1/file\ *" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors (code 23) at main.c(1655) [Receiver=3.1.1]
rsync: [Receiver] write error: Broken pipe (32)

Eu suspeito que algo está errado com minha citação aqui ... Alguém tem alguma idéia do que estou fazendo errado? Observe que, se eu apenas chamar o rsync sozinho, não em uma função, ele funcionará como esperado:

rsync -Pzr --compress-level=9 -e "ssh -i~/.ssh/some_key" "[email protected]":"dir1/file\ *" ./

ATUALIZAÇÃO:

A saída de ssh -v tem a seguinte linha:

rsync --server --sender -vrze.iLsfx --compress-level=9 . dir1/file\ *

Para minha surpresa, o comando está trabalhando magicamente agora e os arquivos estão sendo baixados. Talvez eu tenha tido um erro de digitação mais cedo no caminho que eu estava passando? Infelizmente, a entrada .bash_history foi excluída até agora, então não tenho como saber. De qualquer forma, esse comando rsync parece correto?

    
por villapx 19.08.2017 / 17:07

0 respostas