find

[機能]

  指定されたディレクトリの下にあるファイルで,論理式「expression」に適合するファイルを探します.

[形式]
	find <パス名> ... <expression>
		
  find は,指定されたディレクトリの下にある全てのファイルに対し,expression を順に適用します.ある expression が true を返した場合には,以降に続く expression を評価します.false だった場合には,以降の expression の評価をスキップして即座に false を返します.全ての expression を評価し終わったら true を返します.

  しかし,expression と次の expression の間が「 or 」で結ばれている場合には全く逆となります.前の expression が true だった場合には,以降の expression の評価をスキップして即座に true を返します.false だった場合には,以降の expression を評価します.全ての expression を評価し終わったら false を返します.

  なお,expressions の両側を (...) で括ったものは全体で一つの expression と見なされます.

  <expression> は次の通りです.以下の説明で,引き数 n は 10 進数の整数として使われ,+n は n 以上,-n は n 以下,n は正確に n を示します.

-o, -or <文字列> or,expressions の論理和による結合

-name <文字列> ファイルの名前が文字列と一致した場合に true,そうでなかった場合に false をかえします.

-size n[c] ファイルサイズが n ブロック( 1 ブロックは 512 バイト)の長さであれば true です.n のあとに c が付けられている場合は,サイズはバイト数です.

-mtime n ファイルが n 日以内に変更されていれば true です

-atime n ファイルが n 日以内にアクセスされていれば true です

-newer name ファイルの更新日時が,name で表されるファイルより最近のとき true をかえします.

-type c ファイルのタイプが c のとき true です.ここで,c は,ブロック型スペシャルファイル,キャラクタ型スペシャルファイル,ディレクトリ,シンボリックリンク,fifo,通常のファイルに対して,それぞれ,b,c,d,l,p,f となります.

-print 常に true をかえします.

-exec cmd ; コマンド cmd を実行します.'{}' でファイルの名前を,'{d}' でファイル名のディレクトリ部分を,'{f}' でファイル名の基部を参照できます.コマンド列の終わりには ';' が必要です.コマンドの終了ステータスが 0 のとき true,0 以外のとき false をかえします.

-ok cmd ; exec と似ていますが,コマンドの実行前に実行すべきコマンドを表示して,本当に実行しても良いかどうか聞いてきます.y を押すと実行し,それ以外を押すと実行しません.

[使用例]

  1. ルートディレクトリの下にあるすべてのファイルの内,ファイル拡張子が「 .c 」であるファイル名を出力します.
    	find / -name '*.c' -print
    			
  2. ルートディレクトリの下にあるすべてのファイルの内,ファイル拡張子が「 .c 」または「 .h 」であるファイル名を出力します.
    	find / \( -name '*.c' -o -name "*.h" \) -print
    			
  3. カレントディレクトリの下にあるすべてのファイルの内,ファイル拡張子が「 .bak 」であるファイルを削除します.
    	find . -name '*.bak' -exec rm {} \;
    			
  4. ディレクトリ「 /home/suganuma/ai/cores 」以下にあるファイルの内,文字列 atr を含むファイル名を出力します
    	find /home/suganuma/ai/cores -name '*.c' -exec fgrep -l atr {} \;
    			
[参照]

fgrep, cd, ls, which

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引