2010年2月6日土曜日

まとめてシンボリックリンク

いつも、開発環境として perl をインストールする際、ビルドの際に --configure.gnu prefix=/usr/local/perl として、/usr/local/perl 以下にperlの実行環境一式を入れる。
/usr/local 以下だと、perl をバージョンアップ したい時に「上書き」出来ても「差し替え」が出来ない。バージョンアップ(入れ直し)したい前に、ディレクトリ /usr/local/perl をリネームしておけば、古い環境を温存出来る。

ただ、実行ファイルのパス($PATH)はデフォルトで /usr/local/bin は通るのだが、/usr/local/perl/bin にパスを追加するのはいちいち面倒だ。
/usr/local/perl/bin/* を /usr/local/bin 以下にまとめてシンボリックリンクを張りたい。

# ln -s ../perl/bin/*
とすると当然うまくいかないので、

# cd  /usr/local/bin
# find ../perl/bin -type f -print0 | xargs -0 -I % ln -s %
でうまくいく。
(xargs に -I オプションを付けるのは、Mac OS X が BSD系だから)
(Linux - Ubuntu でもうまくいく)

逆に、/usr/local/perl/bin 以下のファイルを参照するシンボリックリンクをまとめて削除したい場合、
# cd  /usr/local/bin
# find /usr/local/perl/bin -type f -print0 | xargs -0 basename | xargs rm
とすれば良い。
(Ubuntu では # find /usr/local/perl/bin -type f -exec basename {} \; | xargs rm )

※find, xargs コマンドの連携方法はCodeZineのTipsを参考にした。
find/grep/xargsコマンドを使いこなす 業務で楽するためのUNIXテクニック集「検索」編
http://codezine.jp/article/detail/3279

0 件のコメント:

コメントを投稿