unix - 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。
有没有办法解决这个问题?我们不能更改目录的名称...
谢谢
解决方案
你的命令的原因
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
. 如果你想结合rsync
你find
可以在这里描述的技术
https://unix.stackexchange.com/questions/87018/find-and-rsync但是find
macOS附带的版本很可能不支持
-printf
选项(我没有访问 macOS,但在 Freebsd 上尝试过)。在这种情况下,正确的命令应该是这样的:
cd "$SOURCE" && find . -type f -print0 | rsync -vn --files-from=- --from0 . "$TARGET" && cd - >/dev/null
注意这里的几件事:
它适用于名称中包含特殊字符的文件,包括换行符,因为要传输的文件列表 将被文件名中不允许的文件
rsync
分隔。\0
我没有使用您使用的确切 find 和 rsync 选项,修改它们以满足您的需求,但我建议留下
-n
选项进行测试。最后一个
cd -
将返回原始目录并打印其名称,我将其重定向到/dev/null
它不会打扰我们。
最后,正如评论中已经说过的那样,rsync 有可能自己做你想做的事情。考虑阅读
man rsync
并在线查找示例。
推荐阅读
- macos - 避免 SwiftUI 中的文本抖动
- python - 将字典的输出存储到数据框
- algorithm - 没有重复的子序列数
- sed - 如何将文本块移动到范围的末尾(使用 sed)?
- javascript - 如何将循环等待转换为 Promise.all?
- xamarin.forms - 是否有可能在隔离系统(无互联网连接)上实现推送通知?
- vue.js - 我有一个电子项目,我想使用 vueJS
- javascript - 在 svg 路径上绘制箭头而不使用 textPath
- javascript - 通过秘银 js 中的 es6 类在两个文件之间共享数据或共享 es6 类的实例
- android - 使用计时器更改毕加索加载图像的网址