rsync in šumniki v imenu datotek na macu
Če prav se z računalniki ukvarjam že od zgodnjih 80-ih let, in dobro vem, da uporaba šumnikov v imenih datotek ni priporčljiva, me še vedno premami in v imena datotek vseeno vsavim šumnike in sičnike.
Saj ne da bi to na računalniku povzročalo kake težave, to že dolgo ne več, se pa lahko pojavijo težave, ko take datoteke prenašamo med različnimi sistemi - in še to ne vedno!
Pa vendarle sem naletel na točno to.
Z rsync ukazom sem neznansko zadvoljen in sem ga s pridom uporabil, da prepisujem podatke na oddaljeno lokacijo. Da pa bi avtomatiziral še prepis izvora podatkov - mojega maca - sem se lotil in pripravil podobno skripto, ki kopira vsebino map Documents, Pictures, Music in Movies na NAS v rednih časovnih intervalih.
Že prvi, testni zagon (z opcijo --dry-run) je pokazal, da se bodo ponovno prepisovale datoteke s šumniki v imenu (kar je bilo malce čudno, saj sem pred tem že imel kopirane podatke na NAS). Zato sem raje poskusil s prepisovanjem v popolnoma novo, prazno mapo. Sinhronizacija je lepo stekla in čez nekaj minut je bila vsebina mape Documents na NAS. Za kontolo sem mapo odprl v Finderju in poskušal odpreti datoteko s šumniki v imenu.
Kljub temu, da je bila datoteka pravilno vidna v Finderju, pa je program (niti Finderjev Preview) ni znal odpreti. Zgolj zajamral je, da datoteka ne obstaja. Nato sem preveril še kako vsebina mape izgleda na samem NAS (v web vmesniku sem pognal FileStation). Tudi tam so bili šumniki vidni.
Sledil je poskus sinhronizacije mape s programom ForkLift preko AFP protokola (mountana mapa v skupni rabi). Rezultat so bile podvojene datoteke in mape s šumniki!
To mi je dalo misliti, da bo nekaj narobe s kodiranjem šumnikov. Iskanje rešitve mi je dalo odgovor, da rsync pozna parameter --iconv=srclocale,destlocale s katerim lahko vplivamo na konverzijo znakov v imenih datotek. Izkaže se namreč, da Mac uporablja malce manj standardno kodiranje UTF-8 NFD medtem, ko Linuxi oz. NAS uporablja UTF-8 NFC.
Takoj sem poskusil naslednji ukaz:
$ rsync -av --iconv=utf-8-mac,utf-8 source/ user@host:destination/
In glej ga zlomka, rsync na macu se je pritožil, da je --iconv neveljaven parameter.
Malce brskanja in rsync --version razkrije, da Mountain Lion vsebuje precej zastarelo verzijo rsynca 2.6.9, medtem, ko je na voljo že 3.1.0.
Ker sem ravno nekaj dni pred tem namestil HomeBrew (o njem kdaj drugič) sem si rekel: "No pa ga sprobajmo!" in sem vtipkal:
$ brew install rsync
Žal brez uspeha. Očitno je razlog v tem, da rsync že obstaja in nihče ni pripravil recepta za novejšo verzijo. Torej sem se lotil prevajanja in buildanja na roke.
Najprej sem prenesel in razpakiral zadnjo verzijo rsync s projekta Samba, nato sem vse skupaj prevedel in instaliral:
$ ./configure $ make $ sudo make install
in preveril ali je vse ok z ukazom:
$ /usr/local/bin/rsync --version
Zadeva deluje!
Edino kar je treba še poskrbeti je to, da popravimo vrstni red privzetih poti v datoteki /private/etc/paths saj je mapa /usr/bin/ našteta pred mapo /usr/local/bin/ kar povzroči, da se brez tega popravka še vedno normalno zažene stara verzija rsync. Torej premaknemo /usr/local/bin/ pred /usr/bin/.
$ sudo nano /private/etc/paths
Še restart maca in že smo na konju.