我正在尝试创建一个 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 命令看起来正确吗?