Unix FSには、symbolic link と hard link がある。前者は file の名前を参照する機能、後者は一つのファイルをi-node と言う番号で複数の名前でアクセス出来る機能。じゃぁ、alias って何なの? どっちでもないらしいです。
その証拠にHFS+の alias された file は、ls -l で見れない。cat も出来ない。もちろん、cp もダメ。rsync とか ditto とかは動くんだけど、コピーした先は、やっぱり alias。
どうも、HFS+の中のunique idを使って参照しているらしい。file の実体は、alias したファイルらしい。でも、
link count
と言う概念はないので、実体を消すと alias からアクセス出来なくなるらしいです。ファイルの場所を見せない symbolic link みたいなものらしい。一旦、alias を握ってしまえば、file が移動されても参照できるってのは、hard link に近い。でも、消されてしまうと消えちゃう。hard link の場合は、自分が参照している限り残る。ま、いろんな機能があるね。
でも、alias で一つのiTunesに入っちゃったので、折角統一したのに、元のが消せない。そっちを消すと alias 側も消えるから。おーぃ。
iTunes には「ライブラリを整理する」って言う機能があるんですが、iPhotoにはない。再読み込みするって言う手もあるんですが、それやるとアルバムとか縦横の情報が消えます。良くできてるね。
なのでしょうがないので、alias の参照先をditto でcopyするってのを考えたんですが、ls で見れないのをどうすれば良いわけ?
で、また、AppleScript と格闘しました。Finder で、original item of f みたいなことが出来るようです。
osascript \
-e 'on run argv' \
-e 'set p to item 1 of argv' \
-e 'set f to POSIX file p' \
-e 'tell application "Finder"' \
-e 'set al to f as alias' \
-e 'try' \
-e 'set o to original item of al' \
-e 'URL of o' \
-e 'on error' \
-e 'URL of al' \
-e 'end try' \
-e 'end tell' \
-e 'end run' $* | perl -lp -e 's=file://localhost==;' -e 's/\%([0-9A-z][0-9A-z])/pack("H*",$1)/eg'
ってな感じで出来るらしい。最後の perl は、URL から、Unix 名を復帰しているだけです。
Finder で delete / copy までするべきな気もするが、3万枚だからなぁ。で、後は、shell script を生成して実行と。2時間かかったけど、そんなものだろう。
http://www.ie.u-ryukyu.ac.jp/%7Ekono/pub/software/get-original
http://www.ie.u-ryukyu.ac.jp/%7Ekono/pub/software/copy-alias.pl
ま、もっと簡単な方法もあるでしょう。
No comments:
Post a Comment