皆さんは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
Google
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
Google
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アプリケーションに変更した後、「全てを変更...」ボタンを押します。
最近のコメント