zsh 脚本从同一远程目录 rsync 多个文件

zsh 脚本从同一远程目录 rsync 多个文件

我正在运行 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/

相关内容