2011年1月4日火曜日

VirtualBox 4.0がリリースされています

しばらく前からVirtualBoxを使っていますが、年末にVersion4.0がリリースされています。Parallels WS、VMWare Fusionのライセンスも持っていますが、それらと遜色ない出来になっていると思います。

もともとSun Microsystemsが作っていたプロプライエタリなソフトウェアだったのですが、途中からオープンソース化されて、GPLが適用されるオープンソースエディションと、PUELという評価用ライセンスが適用されるスタンダードエディションに別れてリリースされていました。Oracle(SUNがOracleに買収されちゃったので)のページからダウンロードできるバイナリはPUELが適用されるプロプライエタリ版のみとなっており、オープンソース版は機能がかなり制限される上に自分でコンパイルする必要がありました。

ですが、Version4.0では、VirtualBox本体はGPLが適用されるオープンソースのみとなり、従来PUEL版にのみ含めれていた機能もかなり盛り込まれています。PUELが適用されるのは、USB2.0対応などが含まれた機能拡張パッケージのみとなります。

正直、SUNがOracleに買収されたので、VirtualBoxがどのような扱いになるかは不安だったのですが、とりあえず良い方向に進んでいるようで一安心です。

findの使い方

findって便利なんですが、使いにくいですね。

バージョン管理ディレクトリを検索から除外する
find . \( -type d \( -name '.svn' -o -name 'CVS' -o -name '.git' \) -prune \) -o -print

サブバージョンしか使っていないなら、で良い。以下のサンプルはそれで。
find . \( -name '.svn' -prune \) -o -print

バージョン管理ディレクトリを検索から除外して、ファイルをすべて表示
find . \( -type d -name '.svn' -prune \) -o \( -type f -print \)

バージョン管理ディレクトリを検索から除外して、ディレクトリをすべて表示
find . \( -type d -name '.svn' -prune \) -o \( -type d -print \)

バージョン管理ディレクトリを検索から除外して、特定の名前のファイルを表示
find . \( -type d -name '.svn' -prune \) -o \( -name "GNUmakefile" -type f -print \)

ワイルドカードも使えます
find . \( -type d -name '.svn' -prune \) -o \( -name "*.mk" -type f -print \)
find . \( -type d -name '.svn' -prune \) -o \( -name "*.[ch]" -type f -print \)

複数パターンを指定する場合は\( \) で囲む必要があります。これは、すべてのソースとヘッダと表示する例です。
find . \( -type d -name '.svn' -prune \) -o \( \( -name "*.[ch]" -o -name "*.[ch]pp" \) -type f -print \)

検索結果それぞれに付いてコマンドを実行する
find . \( -type d -name '.svn' -prune \) -o \( \( -name "*.[ch]" -o -name "*.[ch]pp" \) -type f -print0 \) |xargs -0 -n1 svn status

現在のワーキングコピーにおいて空のディレクトリを検索する
find . \( -type d -name '.svn' -prune \) -o \( -type d -print0 \) |xargs -n1 -0 -iX sh -c 'if [ "$(ls -aC "X")" = ". .. .svn" ];then echo X;fi'