.weblocファイルを.urlファイルに変換する
皆さんはWebページのブックマークをどのように管理されていますか。
私はWindows環境との共有を考慮して、urlファイルで管理しています。初期のMac OS Xのデフォルト・ブラウザはInternet Explorer (IE)だったので、ブラウザ上部のURL左のアイコンをFinderウィンドウにドラッグ&ドロップするとこのurlファイルが作成されます。urlファイルは以下のような形式のデータファイルです。
$ cat Google.url
[InternetShortcut]
URL=http://www.google.com
このurlファイルはWindows環境と互換性があり、ダブル・クリックで目的のWebページを表示することができます。
1ファイル=1URLのブックマークの管理は、Finderウィンドウへのドラッグ&ドロップだけですし、urlファイルが多くなってもFinderの検索やfindコマンドで簡単に探し出すことができます。また、Windows環境でもまったく同じ操作でブックマーク管理が行えます。そのためブックマーク管理方法としては、とてもシンプルでクロスプラットフォーム環境でうまく機能していました。
ところが、Macのデフォルト・ブラウザがSafariになると問題が発生しました。SafariでURL左側のアイコンをFinderウィンドウにドラッグ&ドロップしたときにできるファイルは、拡張子が.weblocのファイルになってしまいました。しかも、この.weblocファイルは中身のないサイズ0のファイルです。
$ ls -l Google.webloc
-rw-r--r-- 1 foo wheel 0 Aug 20 16:08 Google.webloc
$ cat Google.webloc
$
.weblocファイルは中身がないのにどうやってURLを記憶しているのでしょうか?
実は、.weblocファイルの情報はMacのHFS+ファイルシステム特有のリソース・フォークに保存されているのです。ファイルのリソース・フォークを取り出すには、ファイル名の後ろに仮想パス"/rsrc"をつけます。リソース・フォークはバイナリの構造化データですので、stringsコマンドでフィルタしてあげると、以下のように、きちんとURLが記録されているのが分かります。
$ strings Google.webloc/rsrc
TEXT
url
urln
http://www.google.com
http://www.google.com
drag
"url
.TEXT
:urln
Google.webloc
Google.webloc
Google.webloc
Google.webloc
Mac OS Xになって、リソース・フォークはなくなっていくものだと思っていましたが、Appleはまだまだリソース・フォークを使い続けるつもりのようです。リソース・フォークはHFS+ファイルシステムに特有の機能ですが、HFS+ではない他のファイルシステムでもリソース・フォークを扱えるようにしています。例えば、FAT32のファイルシステムをMacにマウントし、SafariのURLアイコンをドラッグドロップすると、以下のようにファイル名の先頭に"._"がついた隠しファイルが作成されます。この先頭が"._"のファイルがリソース・フォークになっており、HFS+の場合と同様のデータが取得できます。
$ ls -a
._Google.webloc
Google.webloc
$ strings ._Google.webloc
TEXT
url
urln
http://www.google.com
http://www.google.com
drag
"url
.TEXT
:urln
Google.webloc
Google.webloc
Google.webloc
Google.webloc
MacとWindowsの相互運用を考えた場合、Windowsでは扱えないリソース・フォークに頼った.weblocファイルを.urlファイルに変換した方が良さそうです。幸い.urlファイルは、今でもSafariで正しく開くことができます。
以下のシェル・スクリプトは.weblocファイルを.urlファイルの形式に変換するものです。
#!/bin/sh
if [ $# -lt 1 ]; then
echo Usage: `basename $0` "file1.webloc" "file2.webloc" ...
fi
for i in "$@"
do
url_name="`echo "$i" | sed 's/.webloc/.url/g'`"
rsrc_file="`dirname "$i"`/._`basename "$i"`"
if [ -f "$rsrc_file" ]; then
rsrc="$rsrc_file" # non-hfs file system
else
rsrc="$i"/rsrc # hfs file system
fi
# extract url.
url=`strings "$rsrc" | grep http | sed 's/^.//' | head -1`
# make url file.
cat << EOF >$i
[InternetShortcut]
URL=$url
EOF
# remove unnecessary resource part on non-hfs file system.
if [ -f "$rsrc_file" ]; then
rm "$rsrc_file"
fi
mv "$i" "$url_name"
echo "Conversion completed and saved as:"
echo "$url_name"
echo ""
done
上記のスクリプトファイルをwebloc2urlというファイル名で保存し、chmodで実行権を与えると、以下のように簡単にurlファイルに変換できます。
$ webloc2url Google.webloc
ただし、urlファイルをダブルクリックしてSafariで表示しようとした場合、必ず新しいウィンドウを開いてしまいます。また、Firefoxをデフォルトブラウザにしている場合、Mac版のFirefoxはurlファイルを認識してくれません。このような場合は、以下のAppleScriptをスクリプトエディタを用いてアプリケーション形式で保存し、urlファイルがこのAppleScriptアプリケーション経由で開かれるようにするとよいでしょう。
on open theFiles
repeat with theFile in theFiles
do shell script "cat " & quoted form of POSIX path of theFile & " | grep '^URL=' | sed 's/URL=//'"
set theURL to the result as text
tell application "Finder"
open location theURL
end tell
end repeat
end open
全てのurlファイルがこのAppleScript経由で開かれるようにファイル拡張子の関連付けを変更するには、Finder上で適当なurlファイルの「情報をみる」ウィンドウを表示し、「このアプリケーションで開く」を上記のAppleScriptアプリケーションに変更した後、「全てを変更...」ボタンを押します。
| 固定リンク
« Parallels Desktop for Macベンチマーク (build 1862) Solaris 10の場合 | トップページ | Maven 2を使ったJava EE 5アプリケーション開発 〜導入編〜 »
「applescript」カテゴリの記事
- .weblocファイルを.urlファイルに変換する(2006.08.20)
- iTunes Storeのトップソングを自動再生する(2007.02.04)
- iSyncを定期的に実行する(2007.02.06)
「mac」カテゴリの記事
- Sanyo DMX-HD1000雑感(2007.09.19)
- Core 2 Duo Mac上のVMWare Fusionで32bit Solaris 10を動作させるTIPS(2008.03.23)
- MacBook 2.4GHz Core 2 DuoのSATAホストアダプタはSATA-150(2008.03.23)
- MacBook 2.4GHz Core 2 Duoがやってきた!(2008.03.21)
- Inside Leopard: X11.appと日本語環境の問題(2007.10.28)



コメント
すいません。最後の「全てを変更...」ボタンを押す、は私のMac OS X 10.4.7ではうまくいきませんでした。
解決できたら、またお知らせします。
投稿: javaflavor | 2006年8月21日 (月) 19時27分
webloc2urlのシェル・スクリプトを実行する際、
$ webloc2url ~/url/Google.webloc
のように、weblocファイルがカレントディレクトリになくても正しく変換できるようにシェル・スクリプトを修正しました。
投稿: javaflavor | 2006年8月21日 (月) 23時51分