出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/10/26 08:34 UTC 版)
|
|
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 (2025年10月)
|
ここでは主にUnix系プラットフォームで利用できるディレクトリ検索プログラムであるfind(ファインド)について記述する。ファイルシステムの1つ以上のディレクトリツリー上で検索を行い、ユーザーの指定した基準にマッチするファイルを探す。既定の動作としては現在のワーキングディレクトリ配下にある全ファイルをリストアップする。さらに find はマッチした各ファイルに対して何らかのアクションを実行するよう指定できるため、大量のファイルを操作することができる非常に強力なプログラムであるといえる。正規表現によるマッチングもサポートしている。
find は評価式「-regex」や「-iregex」などを用いることで正規表現によるパス名のマッチングを行うことが可能であるが、GNUプロジェクト版のfindは複数の正規表現文法に対応している。そこで、GNU findは、既定では正規表現をGNU Emacsの正規表現として解釈し、他の異なる文法についてはコマンドラインオプション「-regextype」の引数によって解釈を切り替えて対応している。
find . -name 'my*'
find . -name my\* -type f
-type f -name my\*」とする。当然、結果は同じになる。
-print を実行するようになっているためである。なお、初期の find コマンドには既定のアクションが存在しなかったため、何も指定しないと検索をするだけでその結果は表示されなかった。
find . -type f -name 'my*' -ls
find / -type f -iname myfile -print
-iname」は大文字小文字を区別しない検索式。単にデータファイルを探すだけなら、「/」を指定するのは非常に時間がかかる可能性があり、賢い方法ではない。
find /home/brian -type f -name myfile -print
find local /tmp -type d -name mydir -print
find / -type f -name myfile -print 2> /dev/null
find . -type f \( -name '*jsp' -or -name \*java \) -ls
-ls と -or は全てのバージョンの find で使えるわけではない。
find /var/ftp/mp3 -type f -iname '*.mp3' -exec chmod 744 {} \;
-exec chmod 744 {} \; の部分で指定されている。MP3ファイルそれぞれについて、chmod 744 {} というコマンドの {} の部分をファイル名に置き換えたものが実行される。セミコロン(シェルが解釈するのを防ぐためエスケープされている)がコマンドの終わりを示している。なお、744 というパーミッションは普通に記せば rwxr--r-- であり、ファイル所有者は完全なアクセス(読み書きと実行)が可能だが、それ以外のユーザーは読むことしかできない。
find /var/ftp/mp3 -type f -iname '*.mp3' -print | xargs chmod 744
-execでは、該当するファイル1つにつき一度ずつプロセスを起動することとなり、効率が悪い。いったん-printで出力し、xargsによってコマンドラインとして渡せるだけの量をまとめて渡すことで、効率化することができる。なお、GNUプロジェクト版のfindには、ファイル名をヌル文字区切りで出力する-print0オプションがあり、xargs -0で解釈させることで、ホワイトスペースの入ったファイル名についても正常に処理可能となる。
find /tmp -exec grep "search string" '{}' /dev/null \; -print
find /tmp -exec grep -H "search string" '{}' \; -print
grep -R /tmp "search string"
find ~jsmith -exec grep "LOG" '{}' /dev/null \; -print
/home/jsmith/scripts/errpt.sh:cp $LOG $FIXEDLOGNAME
/home/jsmith/scripts/errpt.sh:cat $LOG
/home/jsmith/scripts/title:USER=$LOGNAME
find . -type f -iname '*.xml' -exec grep "ERROR" '{}' \; -print
find . -user <userid>
Windowsコマンド(DOSコマンド)としてのfindは、ちょうどUnixコマンドでいうところのfgrepのような文字列検索を行う。実行すると検索文字列が含まれる行が標準出力に出力される。ちなみにgrepに相当するコマンドはfindstrである。