До обновления до Snow Leopard я активно использовал символические ссылки (симлинки или же symlinks) для того, чтобы синхронизировать файлы и каталоги, находящиеся вне иерархии Dropbox, например каталог проектов или базу данных паролей 1Password. Когда перешёл на Snow Leopard, то почему-то симлинки у меня перестали работать.

Также эту проблему озвучил @umputun в первом подкасте после выхода Snow Leopard, так что я был не одинок.

Поясню – я обычно делал относительные симлинки:

ole-mac:~ ctrld$ cd ~
ole-mac:~ ctrld$ date > test1.txt
ole-mac:~ ctrld$ ls -al test1.txt
-rw-r--r-- 1 ctrld staff 30 Sep 23 23:31 test1.txt
ole-mac:~ ctrld$ ln -s test1.txt Dropbox/Public/
ole-mac:~ ctrld$ ls -al Dropbox/Public/test1.txt
lrwxr-xr-x 1 ctrld staff 9 Sep 23 23:31 Dropbox/Public/test1.txt -> test1.txt

Dropbox 0.6.559 вообще не реагировал на создание симлинка (не было активности на значке в menubar) и ничего не синхронизировал, в версии 0.7.24 активность появлялась, но никогда не заканчивалась (отображался статус “Indexing 1 file…”).

В Интернет я рапортов о проблеме с симлинками не нашёл, и решил написать разработчикам. Rian H. среагировал почти мгновенно – я написал ночью, и утром уже был ответ:

hi oleg i believe you are using the “ln” command incorrectly. the command you want to execute is:

$ ln -s $PWD/test1.txt Dropbox/Public/

the reason is that symlink sources are used verbatim by the kernel. meaning if you try to access test1.txt in your Dropbox/Public folder, it’s looking for test1.txt in the same folder (a recursive symlink). You need to either a full path or a relative path from Dropbox/Public

Моя ошибка была “от ума” – я привык создавать относительные симлинки, а нужно было создавать абсолютные:

Вместо

$ ln -s test1.txt Dropbox/Public/

Нужно делать так:

$ ln -s $PWD/test1.txt Dropbox/Public/

Как только я так сделал, симлинки стали синхронизироваться.

Примечание 1. Я использую Experimental Build, но должно работать и на стабильном.

Примечание 2. После такого простого решения я задумался о том, что возможно под 10.5 я создавал абсолютные симлинки, а на 10.6 стал создавать относительные. Но по крайней мере теперь ясно, как делать правильно.