« Parallels Desktop for Macベンチマーク (build 1862) Solaris 10の場合 | トップページ | Maven 2を使ったJava EE 5アプリケーション開発 〜導入編〜 »

.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
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アプリケーションに変更した後、「全てを変更...」ボタンを押します。

Finderinfoopenurlall_2

|

« Parallels Desktop for Macベンチマーク (build 1862) Solaris 10の場合 | トップページ | Maven 2を使ったJava EE 5アプリケーション開発 〜導入編〜 »

applescript」カテゴリの記事

mac」カテゴリの記事

コメント

すいません。最後の「全てを変更...」ボタンを押す、は私のMac OS X 10.4.7ではうまくいきませんでした。
解決できたら、またお知らせします。

投稿: javaflavor | 2006年8月21日 (月) 19時27分

webloc2urlのシェル・スクリプトを実行する際、

$ webloc2url ~/url/Google.webloc

のように、weblocファイルがカレントディレクトリになくても正しく変換できるようにシェル・スクリプトを修正しました。

投稿: javaflavor | 2006年8月21日 (月) 23時51分

WINのお気に入りでブックマークを管理していてこの度MACを導入したものの
ファイアフォックスでお気に入りを開けず困っていたところこの記事を発見しました
どうもありg・・・「全てを変更...」さえおせれば・・・

投稿: | 2011年2月 3日 (木) 11時31分

WINのお気に入りでブックマークを管理していてこの度MACを導入したものの
ファイアフォックスでお気に入りを開けず困っていたところこの記事を発見しました
どうもありg・・・「全てを変更...」さえおせれば・・・

投稿: | 2011年2月 3日 (木) 11時32分

とりあえずURLファイルを検索して一括で関連付けを変えたところすべての更新時刻が変わり今までのソートが使えないことに
なんともはやあまり素人が関連付けに手を出してはいけなかったのですかな
おかしなコメントの連投すいませんでした

投稿: | 2011年2月 3日 (木) 11時40分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/181807/11524535

この記事へのトラックバック一覧です: .weblocファイルを.urlファイルに変換する:

« Parallels Desktop for Macベンチマーク (build 1862) Solaris 10の場合 | トップページ | Maven 2を使ったJava EE 5アプリケーション開発 〜導入編〜 »