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?