findの使い方


find / -name 'hanoi*' 2>/dev/null

ハノイの塔のプログラムを過去に作ったかどうかと思い、わたしのザウルスZaurusでfindをかけてみたら、

emacsについてきたhanoi.elc

vimについてきたhanoi.vim

がひっかかりました。

感想:
1.findはいつも使い方を思い出すのに苦労する。linuxunixで一番使うコマンドは何かとhistoryと打ってみたら、cl、ls、grepあたりで、それ以外はeditorやソフトを起動してしまっている。shellは使うけどね。

2.emacsvimも使い方がわからないままつかっていて、Zaurusではunicodeの関係でvimを使っている。vimを使っているとemacsが使えなくなるので寂しいのですが、vimvimなりにすばらしい。

3.vimにマクロがあるのを知らなかった。動かし方もよくわからないままhanoi.vimを動かしてみたら、キャラクターベース(数字)でハノイが動いていて、かわいらしい。

4.結局、自分で作ったものはなかった。ちょっとrubyでやってみよう。

#! /usr/bin/env ruby.rb
@k = 0 # counter
def hanoi(n, x, y, z) # xにあるn個の円盤をzを使ってyに移す
if n == 0
  # do nothing
else
  hanoi((n-1), x, z, y) # まずn-1個の円盤をxからyを使ってzに移す
  printf("%3d: %s => %s   ", @k, x, y) # xからyに移す
  @k = @k + 1 # カウンターをインクリメントして
  puts if (@k % 5) == 0 # 5回ごとに改行する
  hanoi((n-1), z, y, x) # その後zにあるn-1個の円盤をxを使ってyに移す

end
end

hanoi(6, "A", "B", "C")


よしよし。


追記:「findの使い方」で検索してこのページに来られる方が多いので、少し解説。
実例: find / -name 'hanoi*' 2>/dev/null
findのあとのスラッシュ「/」は、ルートの意味でこれでシステム全体を探せます。Zaurusのハードディスク6GとSCカード2Gを一瞬にして検索。カレントフォルダー以下にしたい場合は、ピリオド「.」にする。
「-name」はファイル名の検索をしますよ、という意味で、
「hanoi*」はhanoiで始まり、そのあとに任意の文字列がつくファイルという意味。
シングルクウォート「'」で囲っているのは、シェルが「hanoi*」のワイルドカードを解釈して展開してしまわないように囲っています。
「2>/dev/null」は、ファイルでないフォルダーについて、エラーが山のようにでるので、それを出ないようにするためのおまじない。
unixのコマンドはmanやinfoでわかるといいますが、findはちょっと癖があって私はいつも自分のこの例をノートから探し出して使っています。