通过 /bin/bash /bin/sh 进行 rsync 备份的文件夹和文件中的多个空格

通过 /bin/bash /bin/sh 进行 rsync 备份的文件夹和文件中的多个空格

由于公司拆分,需要一次性备份两台旧的、杂乱的 Windows XP 机器。使用 CentOS 6 x64 最小安装,我安装了一些 MS Windows NTFS 硬盘,这些硬盘通过 ntfs3g 本地安装,并通过 smb 安装在 LAN 上。我需要自己记录备份的内容,并认为没有比用 rsync 编写所有脚本更好的方法了。

问题是几乎所有的 SOURCE 文件夹名称中都有空格。rsync 的手册页似乎表明它仅支持多个源文件,不是多源文件夹。所以我认为“足够简单”,创建一个列表并将每个源文件夹一次一个地传递给 rsync。

脚本:


SOURCEWITHSPACES=( "${PREFIX}/'Documents\ and\ Settings'/.  ${PREFIX}/'electronic\ claims'/.  ${PREFIX}/'billing\ statements'/." )
for P in ${SOURCEWITHSPACES[@]}; 
  do echo $P; 
done;

输出:

/media/4EC75/'文档\
和\
设置'/。
/媒体/4EC75/'电子\
索赔'/。
/媒体/4EC75/'计费\
声明'/。

因此,当将其传递给 rsync 时,它无法识别任何 SOURCE 文件夹。我不想使用 glob,因为它需要明确说明要备份的内容。我还尝试使用逗号和冒号分隔文件夹名称,但这也不起作用。处理此问题的可靠方法是什么?切换到 perl 还是 python?请不要告诉我使用 robocopy.exe,因为我已经使用它多年了,发现它在 Windows 版本之间差异很大,可靠性较低。此外,我永远不会再使用 Windows。

TAG=spacesinfolderfilenames

答案1

shell 脚本应该是:

SOURCEWITHSPACES=( "${PREFIX}/Documents and Settings/." "${PREFIX}/electronic claims/."  "${PREFIX}/billing statements/." )
for P in "${SOURCEWITHSPACES[@]}";
    do echo "$P";
done

相关内容