2014-09-29 2 views
1

Итак, я пытаюсь написать несколько небольших скриптов, которые позволяют мне управлять своей библиотекой iTunes, к которой у меня есть клоны на нескольких компьютерах OS X.Работа с пробелами в аргументах пути rsync

Основная идея заключается в том, что у меня есть NAS, где хранится копия библиотеки, которая используется как промежуточная «главная копия», поскольку машины, на которых хранятся фактически использованные копии, недоступны все время. Если я хочу обновить свою старую копию на машине B с более новой версией на машине A, я бы затем обновил копию NAS на основе текущего состояния машины, а затем обновил машину B из обновленной копии NAS, возможно, в более позднее время.

Файлы сценариев расположены на NAS в той же папке, в которой также находится каталог iTunes. Поскольку я монтирую NAS в качестве тома через AFP, я просто открываю окно 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, поскольку этот аппарат имеет несколько жестких дисков, а / - это не тот же диск/раздел, что и /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" 
Смежные вопросы