特定の条件に合致するファイルを探して操作する (find)

対象プラットフォーム: FreeBSD 8.x
(下記手順を2014/05/01にFreeBSD 8.4-RELEASEで確認済み)


はじめに

深いディレクトリ階層の中から特定のファイルを探したり、ワイルドカードが使えないコマンドでワイルドカードのニーズを満たす方法として「find」が提供されています。

このページでは、この「find」の使い方について説明します。

条件に合致するファイルを探す

FreeBSDとLinuxでは、各種設定ファイルの保存場所が異なるため、片方に慣れた人がもう片方の環境で設定を行う場合に苦労することが多いのではないでしょうか?

ファイル名が分かっているが、そのファイルがどのディレクトリに配置されているか分からない場合は、findを以下のように使うことにより、指定のファイルの配置場所を見つけることが出来ます。

「find」の利用方法(「httpd.conf」ファイルを探す)
$ find . -type f -name "httpd.conf" -print

上記の例では、カレントディレクトリおよびその配下の階層から「httpd.conf」というファイルを探し、そのファイルのフルパスを表示します。

カレントディレクトリのみを検索対象とし、その配下の階層を検索対象としない場合には、以下のようにしてください。

「find」の利用方法(カレントディレクトリから「httpd.conf」ファイルを探す)
$ find . -maxdepth 1 -type f -name "httpd.conf" -print

条件に合致するファイルに対し特定の処理を行う

次に、ワイルドカードに対応していないコマンドを、擬似的にワイルドカードがあるように使う方法について説明します。

FreeBSDのchmodは、「-R」パラメータをつけると「*.cgi」のような複雑なワイルドカード指定を展開してくれません。
たとえば、「chmod -R 555 *.cgi」のように指定しても、パターンマッチに失敗してしまいます。

findを下記のように利用することにより、特定のディレクトリ配下の拡張子「.cgi」のファイルの権限を変えるニーズを満たすことが出来ます。

「find」の利用方法(拡張子「.cgi」の権限を「555」に変更)
$ find . -type f -name "*.cgi" -exec chmod 555 {} \;

「-type f」の指定は、「一般的なファイルが対象」の意味です。

また、「-type d」と指定することにより、ディレクトリをマッチ対象と出来ます。
たとえば、特定のディレクトリ配下のディレクトリの権限を「755」にするには、下記のようにします。

「find」の利用方法(ディレクトリの権限を「755」に変更)
$ find . -type d -exec chmod 755 {} \;

大文字小文字を区別せずマッチさせるには、「-iname」を利用します。

「find」の利用方法(拡張子「.rm」「.RM」「.rM」「.Rm」のファイルを「/tmp」に移動)
$ find . -type f -iname "*.rm" -exec mv {} /tmp \;

変更履歴

2011/01/12

・大文字小文字を区別しない指定「-iname」の説明を追記。

2010/04/13

・指定した階層のディレクトリのみを探索し、配下の階層を検索しないパラメータ「-maxdepth 1」の説明を追記。


あなたの探し物は見つかりましたか?
まさにこれだ 参考になった ちょっと違う これじゃない
何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。


目次に戻る
image