首页 > 解决方案 > rsync 文件在文件夹名称中带有空格的问题

问题描述

我正在尝试在工作中使用 rsync 备份一些文件。我遇到的问题是我要备份的文件夹之一中有一个空间。

SOURCE=/Volumes/Annons Prod/Ad
TARGET=/Volumes/Backup/Annons Prod/Ad
TARGETDISK=/Volumes/Backup

我已经像这样尝试过/Volumes/Annons\ Prod/Ad"/Volumes/Annons Prod/Ad"但是结果却是一样的。

rsync 命令:

time $RSYNC -eahfs -a -E -x -S -p -r -u --progress `find "$SOURCE" -type d -mtime -144h` "$TARGET" >>

错误信息说:rsync link_stat "/Volumes/Annons" failed, no such file or directory

我在 Mac 上执行此操作,文件是 .sh。

有没有办法解决这个问题?我们不能更改目录的名称...

谢谢

标签: unixrsync

解决方案


你的命令的原因

time $RSYNC -eahfs -a -E -x -S -p -r -u --progress `find "$SOURCE" -type d -mtime -144h` "$TARGET" >>

不能正常工作是find "$SOURCE" -type d -mtime -144h命令替换的输出经历了分词。您的 shell 将由空格分隔的每个单词视为 rsync. 如果你想结合rsyncfind可以在这里描述的技术 https://unix.stackexchange.com/questions/87018/find-and-rsync但是findmacOS附带的版本很可能不支持 -printf选项(我没有访问 macOS,但在 Freebsd 上尝试过)。在这种情况下,正确的命令应该是这样的:

cd "$SOURCE" && find . -type f -print0 | rsync -vn --files-from=- --from0 . "$TARGET" && cd - >/dev/null

注意这里的几件事:

  1. 它适用于名称中包含特殊字符的文件,包括换行符,因为要传输的文件列表 将被文件名中不允许的文件rsync分隔。\0

  2. 我没有使用您使用的确切 find 和 rsync 选项,修改它们以满足您的需求,但我建议留下-n选项进行测试。

  3. 最后一个cd -将返回原始目录并打印其名称,我将其重定向到/dev/null它不会打扰我们。

最后,正如评论中已经说过的那样,rsync 有可能自己做你想做的事情。考虑阅读 man rsync并在线查找示例。


推荐阅读