Linuxコマンド - find

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

findコマンドとは、ファイルやディレクトリを検索するコマンドである。

findコマンドで検索できるものは、名前、名前の一部、タイムスタンプ、ファイルサイズ等がある。
検索した結果に対しては、他のコマンドを組み合わせることで何かの処理をすることも可能である。

CMSをインストールする作業の中では、ある条件のファイルのみにパーミッションを設定するような作業がよくある。
そのような時は、このfindコマンドを使用することで効率が良くなる。

ここでは、findコマンドの基本的な使用方法および便利な使用方法を記載する。


findコマンドの基本

findコマンドの基本的な書式は次の通りである。

find <検索開始ディレクトリ> <検索条件> <アクション>


findコマンドは、<検索開始ディレクトリ>を起点として、<検索条件>を満たすファイルを探して、<アクション>を実行する。
<検索条件>に何も指定しない場合、全てのファイルとディレクトリが対象となる。

例えば、以下の例では、.(カレントディレクトリ)を起点として、hoge.txtファイルを探して、そのパスを表示している。
この例では、<検索条件>として-name hoge.txtを指定しており、ファイル名を絞り込んでいる。
また、<アクション>として-printを指定しており、パス名を表示するためのものである。
<アクション>を指定しない場合は、標準で-printが指定されるので、省略しても構わない。

find . -name hoge.txt -print


ディレクトリ名またはファイル名が空白を含む場合、-print0オプションを付加する。
findコマンドやxargsコマンド等は、空白を複数ファイルのリストの区切りとして扱うため、空白を含むファイルの受け渡しができないためである。

xargsコマンドでは、-0オプションを付加する。
-0オプションは、ファイルのリストの区切り文字において、空白ではなく\\0(ヌル文字)を使用する。
これにより、空白を含むファイル名も正常に扱うことができる。

# txt拡張子のファイル群のファイル内容から、パターン"hoge"を検索する
find . -name "*.txt" -print0 | xargs -0 grep -iE "hoge"



findコマンドのオプション

オプション 説明
-name ワイルドカードを使用して、ファイルやディレクトリ名の一部のみ指定した検索する。
大文字小文字を区別する。
ファイル名の指定には、ワイルドカードである*(任意の文字列)と?(任意の1文字)が使用できる。
ワイルドカードを使用する時は、'(シングルクォーテーション)でファイル名を囲むこと。
-iname ワイルドカードを使用して、ファイルやディレクトリ名の一部のみ指定した検索する。
大文字小文字を区別しない。
ファイル名の指定には、ワイルドカードである*(任意の文字列)と?(任意の1文字)が使用できる。
ワイルドカードを使用する時は、'(シングルクォーテーション)でファイル名を囲むこと。
-atime 任意の日数にアクセスされたファイルやディレクトリを検索する。
-mtime 任意の日数に更新されたファイルやディレクトリを検索する。
-amin 任意の分数にアクセスされたファイルやディレクトリを検索する。
-mmin 任意の分数に更新されたファイルやディレクトリを検索する。
-anewer 任意のファイルの更新日時よりも後にアクセスしたファイルやディレクトリを検索する。
-newer 任意のファイルの更新日時よりも後に変更したファイルやディレクトリを検索する。
-empty ファイル容量が0のファイルやディレクトリを対象とし検索する。
-size ファイル容量を指定し検索する。
-type f ファイルのみを対象とし検索する。
-type d ディレクトリのみを対象とし検索する。
-type l シンボリックリンクのみを対象とし検索する。
-perm パーミッションで検索する。
-and 複数の条件を使って、全ての条件に当てはまるファイルやディレクトリを検索する。
-or 複数の条件を使って、いずれかの条件に当てはまるファイルやディレクトリを検索する。
-not 条件に当てはまらないファイルやディレクトリを検索する。
-exec 検索結果に対してコマンドを実行する。



findコマンドの組み合わせ

mvコマンド / cpコマンド

findコマンドは、mvコマンドやcpコマンドと組み合わせて使用することができる。

# ~/hogeディレクトリ内の.c拡張子のファイル群を、~/piyoディレクトリに移動している
find ~/hoge -name "*.c" -exec mv {} ~/piyo \;

# ~/hogeディレクトリ内の.c拡張子のファイル群を、~/piyoディレクトリにコピーしている
find ~/hoge -name "*.c" -exec cp {} ~/piyo \;


chmodコマンド

findコマンドは、chmodコマンドと組み合わせて使用することができる。

# ディレクトリのパーミッションを755に変更
find . -type d -exec chmod 755 {} \;
find . -type d -print -exec chmod 755 {} \;  # より安全に実行する場合

説明:
-type d
ディレクトリのみを検索する

-exec chmod 755 {} \;
見つかった各ディレクトリに対してパーミッションを755に変更する

{}
findで見つかったディレクトリのパスが入る

\;
execオプションの終了を示す