ファイルが多くなってくると、どこに何のファイルを置いたか忘れてしまうことがある。また、エディタが作ったバックアップファイルだけを削除したいというようなこともある。findコマンドは、ディレクトリツリーの中から指定された条件に合うファイルを見つけてくれる。さらに、そのファイルに対して操作をすることもできる。
拡張子が.bakの名前を持つファイルを探したいときは、次のようにする。最初の引数のドットは検索をするディレクトリ位置である。この場合は、カレントディレクトリ以下を探すよう指定している。-nameはファイル名で探すという指示であり、名前の条件は「*.bak」に一致するファイルとしている。ファイル名を引用符で囲んでいるのは、アスタリスクをシェルに解釈されないようにするためだ。
USER$ find . -name '*.bak' ./2000-05/linux.txt.bak ./2000-05/lists.txt.bak
execオプションを用いると、探し出した各ファイルに対して、削除やパーミッションを変更したりといった操作をすることができる。たとえば、バックアップファイルを削除するには、次のように指定する。execオプションはセミコロン(;)までの間をコマンドとして実行する。セミコロンにバックスラッシュを付けているのも、シェルに解釈されないためである。
USER$ find . -name '*.bak' -exec rm -f {} \;
{}の部分が見つかったファイルの名前に置換される。上記の例は、次のように実行されることに等しい。
rm -f ./2000-05/linux.txt.bak rm -f ./2000-05/lists.txt.bak
ディレクトリ単位でファイルのパーミッションを変更するようなとき、chmodのRオプションでは、ファイルもサブディレクトリもすべて変更してしまう。しかし、設定するパーミッションによっては、ディレクトリのパーミッションは変更したくない場合がある。このようなときにもexecオプションは便利だ。
次の例では、ファイルのパーミッションを644、ディレクトリを755にしている。
USER$ find . -type f -exec chmod 644 {} \; USER$ find . -type d -exec chmod 755 {} \;
findは時刻をもとに検索することもできる(画面5)。
USER$ date Wed Mar 22 15:07:46 JST 2000 USER$ ls -ltr 合計 228 -rw-r--r-- 1 ken-na staffs 2909 Mar 13 15:27 from-kinoshita.txt -rw-r--r-- 1 ken-na staffs 1958 Mar 14 20:15 options.txt -rw-r--r-- 1 ken-na staffs 2643 Mar 15 17:42 lists.txt -rw-r--r-- 1 ken-na staffs 2643 Mar 15 17:42 lists.txt.bak -rw-r--r-- 1 ken-na staffs 58572 Mar 22 15:11 genko.txt -rw-r--r-- 1 ken-na staffs 58655 Mar 22 15:11 genko.txt.bak USER$ find . -mtime +6 ./from-kinoshita.txt ./options.txt USER$ find . -mtime -6 . ./genko.txt ./genko.txt.swp ./genko.txt.bak USER$ find . -mtime 6 ./lists.txt ./lists.txt.bak USER$ find . -mmin -10 . ./genko.txt ./genko.txt.bak USER$ find . -newer options.txt . ./genko.txt ./genko.txt.bak ./lists.txt ./lists.txt.bak
画面5 findの実行例
mtimeオプションはファイルが最後に修正された時刻で検索する。オプションのうしろの数値は日数を示している。日数の前にプラスを付けると、最後に修正された時刻がその日数よりも前のファイルが報告される。マイナスの場合は指定した日数が経っていないファイルが報告される。何もつけないとその日数分だけ経過したファイルになる。
mminオプションもmtimeと同様だが、指定する数値の意味が分単位になる点だけが違う。
newerオプションは数値でなく、ファイルを指定する。そして、指定されたファイルが最後に修正された時刻よりも、最近修正されたファイルが報告される。
mtime/mmin/newerはファイルが最後に修正された時刻をもとにしたが、同様のものとして、最後にアクセスされた時刻をもとにするatime/amin/anewer、最後に属性が変更された時刻をもとにするctime/cmin/cnewerもある。