Linux – find コマンドについて詳しく解説

目次

概要

find コマンドは、Linux および Unix 系オペレーティングシステムでファイルを検索するための強力なツールです。 この記事では find コマンドの使い方について詳しく解説します。

基本的な使い方

find [検索開始ディレクトリ] [検索条件] [アクション]
  • 検索開始ディレクトリ: 検索を開始するディレクトリを指定します。省略すると、カレントディレクトリから検索が開始されます。
  • 検索条件: 検索するファイルの条件を指定します。
  • アクション: 検索結果に対して実行するアクションを指定します。省略すると、検索結果が表示されます。

条件の指定方法

  • EXPR: 条件 EXPR にマッチするファイルを検索する
  • !EXPR: (NOT)条件 EXPR にマッチしないファイルを検索する
  • EXPR1 -a EXPR2: (AND)条件 EXPR1 かつ条件 EXPR2 にマッチするファイルを検索する
  • EXPR1 -and EXPR2: (AND)条件 EXPR1 かつ条件 EXPR2 にマッチするファイルを検索する
  • EXPR1 -o EXPR2: (OR)条件 EXPR1 または条件 EXPR2 にマッチするファイルを検索する
  • EXPR1 -or EXPR2: (OR)条件 EXPR1 または条件 EXPR2 にマッチするファイルを検索する
  • EXPR1, EXPR2: 条件 EXPR1 にマッチするファイルを抽出し、その中から条件 EXPR2 にマッチするファイルを抽出する

検索する範囲を指定する

  • -maxdepth LEVELS: 検索する最大の深さを指定します。例えば、-maxdepth 2 は現在のディレクトリとその直下のディレクトリのみを検索します。
  • -mindepth LEVELS: 検索する最小の深さを指定します。例えば、-mindepth 2 は現在のディレクトリとその 1 つ下のディレクトリをスキップし、それ以降のディレクトリを検索します。
  • -mount: ファイルシステムを越えて検索するのを防ぎます。検索を開始するディレクトリと同じファイルシステム内のファイルのみを検索するようにします。

検索条件を指定する

アクセス日時、変更日時に基づく検索

以下は、アクセス日時、変更日時に基づいてファイルを検索するオプションです。

オプション マッチ対象 指定方法
-amin N 最終アクセスから N 分以内のファイル +N または -N
-atime N 最終アクセスから N 日以内のファイル +N または -N
-anewer FILE 指定した FILE よりも新しくアクセスされたファイル
-mmin N 最終変更から N 分以内のファイル +N または -N
-mtime N 最終変更から N 日以内のファイル +N または -N
-newer FILE 指定した FILE よりも新しく変更されたファイル
-used N 最後アクセス後、N 日以内に変更されたファイル
-cmin N ファイルのステータスが最終変更されてから N 分以内のファイル +N または -N
-ctime N ファイルのステータスが最終変更されてから N 日以内のファイル +N または -N
-cnewer FILE 指定した FILE よりも新しくステータスが変更されたファイル

ファイル名に基づく検索

以下は、ファイル名に基づいて検索するオプションです。 完全一致ですが、ワイルドカードを使用できます。

オプション マッチ対象 大文字小文字の区別
-name PATTERN 指定したパターンに一致するファイル 区別する
-iname PATTERN 指定したパターンに一致するファイル 区別しない
-lname PATTERN 指定したパターンに一致するシンボリックリンク 区別する
-ilname PATTERN 指定したパターンに一致するシンボリックリンク 区別しない
-wholename PATTERN 指定したパターンに一致するファイルのフルネーム 区別する
-iwholename PATTERN 指定したパターンに一致するファイルのフルネーム 区別しない
-regex PATTERN 指定した正規表現パターンに一致するファイル 区別する
-iregex PATTERN 指定した正規表現パターンに一致するファイル 区別しない
-path PATTERN 指定したパターンに一致するファイルのパス 区別する

権限に基づく検索

ファイルの所有者、所有グループ、パーミッションに基づいて検索するオプションです。

オプション マッチ対象
-gid N 指定したグループ ID を持つファイル
-group NAME 指定したグループ名を持つファイル
-uid N 指定したユーザー ID を持つファイル
-user NAME 指定したユーザー名を持つファイル
-nouser 有効な所有者が存在しないファイル
-nogroup 有効な所有グループが存在しないファイル
-perm [-/]MODE 指定したパーミッションモードを持つファイル
  • MODE は通常のパーミッション指定です
    • - はその値以上のパーミッションが検索対象です
    • / はいずれかのビットがマッチするパーミッションが検索対象です

ファイルの属性・種類に基づく検索

ファイルの属性に基づいて検索するオプションです。

オプション マッチ対象
-readable 読み取り可能なファイルを検索
-writable 書き込み可能なファイルを検索
-executable 実行可能なファイル
-type [bcdpflsD] 指定したタイプのファイル
-xtype [bcdpfls] 指定したタイプのファイル (シンボリックリンクを解決)
-fstype TYPE 指定したファイルシステムタイプ (例: ext4, nfs) のファイル
-inum N 指定した i ノード番号を持つファイル
-links N 指定した数のハードリンクを持つファイル
-empty 空のファイル
-size N[bcwkMG] 指定したサイズのファイル

-type および -xtype で指定できるオプションは以下の通りです:

オプション 説明
f 通常のファイル
d ディレクトリ
l シンボリックリンク
b ブロックデバイス
c キャラクターデバイス
p 名前付きパイプ (FIFO)
s ソケット

-size で指定できるオプションは以下の通りです:

指定子 説明
b バイト
k キロバイト
M メガバイト
G ギガバイト
c 文字
w 2 バイト文字

アクションを指定する

検索結果に対して実行するアクションを指定できます。たとえば、見つかったファイルを削除します。

find /path/to/search -name "*.tmp" -exec rm {} \;

何も指定しない場合、-print になり、マッチしたファイルの一覧を出力します。

以下は、選択できるアクションの一覧になります。

アクション 説明
-ls ls -dils と同様に検索結果を詳細リスト形式で出力する
-fls FILE 指定したファイルに ls -dils と同様の形式で検索結果を出力する
-print 検索結果を改行で区切って出力する
-fprint FILE 指定したファイルに検索結果を出力する
-print0 検索結果を null 文字で区切って出力する
-fprint0 FILE 指定したファイルに null 文字で区切った検索結果を出力する
-printf FORMAT 指定したフォーマットで検索結果を出力する
-fprintf FILE FORMAT 指定したファイルに対して、指定したフォーマットで検索結果を出力する
-delete 検索結果のファイルを削除する
-prune 現在のディレクトリを検索から除外する
-quit 最初に見つかった結果で検索を終了する
-exec COMMAND ; 検索結果に対して指定したコマンドを実行する
-exec COMMAND {} + 検索結果に対して指定したコマンドを一度に全て実行する
-ok COMMAND ; 実行前にユーザーに確認を求め、検索結果に対して指定したコマンドを実行する
-execdir COMMAND ; 検索結果のディレクトリに移動してから指定したコマンドを実行する
-execdir COMMAND {} + 検索結果のディレクトリに移動してから指定したコマンドを一度に全て実行する
-okdir COMMAND ; 実行前にユーザーに確認を求め、検索結果のディレクトリに移動してから指定したコマンドを実行する

使用例

名前で検索する

指定した名前のファイルを検索します。

find /path/to/search -name "filename"

パターンで検索する

指定したパターンに一致するファイルを検索します。たとえば、拡張子が .txt のファイルを検索します。

find /path/to/search -name "*.txt"

大文字と小文字を区別しない検索する

名前検索時に大文字と小文字を区別しないようにします。

find /path/to/search -iname "filename"

ファイルの種類で検索する

ファイルの種類 (通常ファイル、ディレクトリ、シンボリックリンクなど) で検索します。

  • 通常ファイル: -type f
  • ディレクトリ: -type d
  • シンボリックリンク: -type l
find /path/to/search -type f

サイズで検索する

指定したサイズ以上または以下のファイルを検索します。

  • サイズが 500MB 以上のファイルを検索: -size +500M
  • サイズが 100KB 以下のファイルを検索: -size -100k
find /path/to/search -size +500M

日付で検索する

指定した日付より後に変更されたファイルを検索します。

  • 7 日以内に変更されたファイルを検索: -mtime -7
  • 30 日以上前に変更されたファイルを検索: -mtime +30
find /path/to/search -mtime -7

コメント

コメントする

目次