我正在尝试在 bash 脚本内的一次调用中同步多个目录,并且在引用路径的语法方面遇到了麻烦。
这是我正在尝试的:
backuppath='/path/to/backup/folders/'
declare -a backupitems=('folder1' 'folder2')
backupitems=(${backupitems[@]/#/\"$backuppath})
backupitems=(${backupitems[@]/%/\"})
backup=${backupitems[@]}
rsync ${backup} /path/to/destination
我收到一个 link_stat 错误,说没有这样的文件或目录"/path/to/current/directory"/path/to/backup/folders/folder1""
,然后是 folder2 的相同错误。因此,它似乎正在生成我想要的引用路径,但 rsync 将路径解释为相对路径并添加到前面当前目录的路径。如果我这样做,rsync 可以正常工作
backuppath='path/to/backup/folders/folder1'
rsync "${backuppath}" /path/to/destination
将引号放入 rsync 命令中,但我不能对一个变量中的多个文件夹执行此操作,因为它将多个目录视为一条长路径。我通过遍历文件夹并在每个文件夹上调用 rsync 使脚本使用第二种方法工作,但是由于脚本的其他部分处理文件夹的方式,这种方法稍微有点尴尬,所以我想获得第一种方法如果有一个快速修复工作。
编辑:
对于上面的顶级版本,任何目录名称中都没有空格,我看到以下命令使用set -vx
: rsync '"/path/to/backup/folders/folder1"' '"/path/to/backup/folders/folder2 "' /路径/到/目的地
我收到以下错误消息:
rsync: link_stat "/path/to/current/directory/"/path/to/backup/folders/folder1"" failed: No such file or directory (2)
如果我使用@kdubs 建议的版本,那么当路径中没有空格时一切正常。
当路径中有空格时,kdubs 版本会导致命令:
rsync /path/to/back up/folders/folder1 /path/to/back up/folders/folder2 /path/to/destination
和错误:
rsync: link_stat "/path/to/back" failed: No such file or directory (2)
rsync: link_stat "/path/to/back up/up/folder1" failed: No such file or directory (2)
我的第一个版本需要额外的调整来处理空格,因为用 [@] 扩展数组并通过用 () 包围扩展来创建一个新数组会导致路径中的空格将路径分解为多个数组元素(参见 Tonin 的回答以下)。