2014-09-29 113 views
1

因此,我目前正在尝试编写几个小脚本,这些脚本允许我管理我的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正确识别路径吗?

回答

0

乱搞相当多的,寻找this question后,我设法建立一个有效的解决方案:

localpath=$HOME/Music/iTunes 
remotepath=$(dirname $0)/ 

rsync -avz \ 
    --compress-level 1 \ 
    --exclude 'Mobile Applications/*.ipa' \ 
    --delete \ 
    --delay-updates \ 
    -n \ 
    "$localpath" \ 
    "$remotepath"