UNIXのコマンド2
ファイルを探す
あるファイルがどこのディレクトリにあるか探したい時、どうすれば良いだろうか?
ディレクトリの中をいちいちlsコマンドによって探していたのでは、
たくさんディレクトリがある時には非常に大変である。
そのような場合は findコマンドを使うと便利である。
findの使い方は他のコマンドと違っていて少し複雑だが、
様々な条件によってファイルを見つけたり、見つけたファイルに対して他のコマンドを適用することができるので覚えておくと役にたつコマンドである。
find の使用例
ここではfindの代表的な使い方をいくつか並べてみた。
ここにある以外にもオプションの組合せによってさらに複雑な使い方ができる。
- ある名前のファイルを見つける。
これがfindの一番良く使われる使い方である。
今いるディレクトリ(カレントディレクトリ)から下のディレクトリにある
fileという名前のファイルを探すためには以下のようにコマンドを使用する。
# find . -name file -print
./aaa/bbb/ccc/file <- ./aaa/bbb/cccがfileのあるディレクトリ
最初の . (ピリオド、カレントディレクトリを表す)が探すディレクトリになる。
-nameの後ろに探すファイル名を打ち込んで、最後に-printを必ず付ける。
(-printが無いと探し出したファイル名が表示されない)
またファイル名には正規表現も使用することができる。
例えば、C言語のプログラムファイルだけを探す時は以下のように実行する。
# find . -name "*.c" -print
./aaa/test1.c
./bbb/test2.c
*以外の特殊文字としてはシェルのコマンドラインで使用できるもと
同じものが使用できる。( ?, [ ] )
- findによって探したファイルに対して他のコマンドを実行する。
-execの後のコマンドが実行される。
良く使われるのは、あるディレクトリ以下のファイルを消す時である。
例えば、カレントディレクトリの下のcoreという名前のファイルを消すには以下のように打ち込む。
# find . -name core -exec rm {} \;
find . -name coreによって見つかったファイルが{}に当てはめられて実行される。
\;はコマンド(rm)の終りを表す。
この例では見つかったファイルは黙って消されてしまうので注意すること。
ファイルを消すかどうか確認したい場合はrmの代わりにrm -iを使う。
- ファイルが変更された日時によってファイルを探す。
-mtimeオプションによりいつファイルのデータが変更されたかによってファイルを探すことができる。
例えば、2日(2*24 = 48時間)以内に変更されたファイルを探すには以下のように実行する。
# find . -mtime -2 -print
./aaa/file1
./bbb/file2
-2を+2にすると2日より前に変更されたファイルを探す。
- あるファイルより新しく作られたか書き換えられたファイルを探す。
-newerオプションの後にファイル名を指定する。
以下の例では、old-fileが作成・変更された時より後に作成・変更されたファイルが表示される。
# find . -newer old-file -print
./aaa/new-file1
./bbb/new-file2
- ファイルの大きさによって探す。
-sizeオプションによってサイズがある大きさより大きい(+)・小さい(-)・等しいファイルを探すことができる。
探す時のサイズの単位はcをつけるとバイト単位になる。
(実習室のマシンには無いが、Linuxなどではkをつけるとキロバイト単位になる。)
1000バイト以上の大きさのファイルを探す例。
# find . -size +1000c -print
./aaa/big1-file
./bbb/big2-file
練習課題
- ホームディレクトリの下にあるMELのスクリプト(*.mel)がどこにあるかfindで探してみよう。
ホームディレクトリは~(チルダ)によって表される。
実習室のマシンでは find ~/* とすることによってどこのディレクトリからでも自分のホームディレクトリのしたにあるファイルを探すことができる。
- findはオプションを増やしてゆくことによって色々な条件を組み合わせてファイルを探すことができる。
まず、ホームディレクトリの下にある7日以内に書き換えられて、ファイルのサイズが1024バイト以内のファイルを探してみよう。
- 次にホームディレクトリの下にあってサイズが1024バイトから5120バイトまでの大きさのファイルを探してみよう。
- これらのfindコマンドが正しく実行できたら、そのコマンドをシェルスクリプトにして実行してみよう。
ファイル名を それぞれ上からfind1.sh、find2.sh、find3.sh とする
まとめ
- ファイルを探す時はfindを使う。
- findは
find (探すディレクトリ) (条件)
という形で使う。
- findはオプションの組合せによって複雑な条件でファイルを探すことができる。
- findは探したファイルを別のコマンドで処理することができる。
参考
Prev | Next
Home | Contents
abe@injapan.net