Linuxコマンド - find
概要
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オプションの終了を示す