使用函数args进行rsync

使用函数args进行rsync

我正在尝试创建一个 BASH 函数,可以使用该函数将参数传递到 rsync 中以指定要下载的文件和/或目录。假设服务器有我想要下载的以下文件(空格和下划线是故意的......重要的是文件中有空格):

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

目前,我有以下内容:

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

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

我试图像这样调用这个函数来下载这两个文件:

dl "dir1/file\ *"

(我真的希望能够将星号传递到我的dl函数中,以便它可以通过 rsync 传递到服务器)

但 rsync 退出并出现以下错误:

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)

我怀疑我在这里引用的内容有问题......有人知道我做错了什么吗?请注意,如果我只是单独调用 rsync,而不是在函数中,它会按预期工作:

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

更新:

的输出ssh -v具有以下行:

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

令我惊讶的是,该命令现在实际上神奇地工作了,并且正在下载文件。也许我之前在经过的路径中出现了拼写错误?不幸的是,该.bash_history条目现在已被删除,所以我无从得知。无论如何,rsync 命令看起来正确吗?

相关内容