我正在运行 Debian Bullseye(如果这很重要),并且正在编写一个 zsh 脚本来使用 rsync 从给定的远程目录复制多个文件/目录(作为参数传递给脚本)。它们都位于服务器上的同一目录中,但我需要手动指定名称。到目前为止,我有以下内容:
#!/bin/zsh
files=''
for f in "$@"
do
files="servername:/full/path/'$f' $files"
done
rsync -rh --progress $files ~/Downloads/
这会引发错误:rsync: change_dir "/home/username//servername:/full/path" failed: No such file or directory (2)
但是,在为每个其他参数引发上述错误后,参数中列出的第一个文件将成功下载。
出于某种原因,zsh 似乎将工作目录的完整路径添加到参数中。知道这是为什么吗?为什么它不对第一个参数这样做?如何绕过它?或者是否有更简单的方法从同一远程目录复制多个文件?
仅供参考,我不能在脚本中多次调用 rsync,因为我每次都需要输入 ssh 的密码,而且我希望它能够整夜运行。另外,文件/目录名称有时会包含空格和其他特殊字符,这就是为什么我将它们放在单引号中。 rsync 命令在我手动输入时有效,但在从此脚本运行时无效。
谢谢你!
答案1
所以,我想通了。答案是使用数组。这有效:
#!/bin/zsh
files=()
for f in "$@"
do
files=($files "servername:/full/path/'$f'")
done
rsync -rh --progress ${files[@]} ~/Downloads/