因此,我目前正在尝试编写几个小脚本,这些脚本允许我管理我的iTunes库,其中有多个OS X机器上的克隆。处理rsync路径参数中的空格
基本的想法是,我有一个NAS持有一个用作中间“主副本”的库副本,因为持有实际使用副本的机器始终不可用。如果我想用机器A的新版本更新机器B上的旧版本,然后根据机器A的当前状态更新NAS副本,然后可能在稍后时间从更新的NAS副本更新机器B.
脚本文件位于同一文件夹中的NAS中,该文件夹也包含iTunes目录。由于我通过AFP将NAS作为卷挂载,因此我只需打开包含脚本的目录的Finder窗口,然后拖放我想用于终端窗口的脚本以便执行。
这是我在“更新NAS从本地副本”尝试脚本:
rsync -avz --compress-level 1 --exclude 'Mobile Applications/*.ipa' --delete --delay-updates -n "$(echo $HOME | sed 's/ /\\ /g')/Music/iTunes" "$(dirname $0 | sed 's/ /\\ /g')"
(-n
选项当然只是用于测试脚本)
由于将在路径空间我供应rsync
与,我已经知道我需要以某种方式逃避那些。我也知道在OS X上执行此操作的标准方法是在所有空格中加上反斜杠,至少在终端中手动输入路径时。但上面的代码仍然不会工作 - rsync
抱怨说,它不能更改到我提供的目录,虽然它在错误消息中吐出的路径似乎是非常好的,可以是cd
'd,如果您删除了双它首先围绕报价:
[...]
building file list ... rsync: change_dir "/Volumes/Macintosh\ HD/Users/Julian/Music" failed: No such file or directory (2)
done
[...]
如果我删除脚本本身周围的双引号,rsync
似乎没有兑现在所有的逃避反斜杠,仍然把反斜杠作为路径分隔符下面的空间:
[...]
building file list ... rsync: link_stat "/Volumes/Macintosh\" failed: No such file or directory (2)
rsync: change_dir "/Volumes/Macintosh HD/Users/Julian/HD/Users/Julian/Music" failed: No such file or directory (2)
done
[...]
不,我不能解决这个问题通过缩短/Volumes/Macintosh\ HD/Users/Julian/Music
到/Users/Julian/Music
,因为此机器有多个HDD,并且/
与/Volumes/Macintosh\ HD
不是相同的磁盘/分区。所以我需要为这个特定的问题找到一个解决方案。
我现在已经严重失落了。
任何人都可以请我解释一下我需要改变以便让rsync
正确识别路径吗?