コマンド早見表 #
解説は不要という方は、以下のコマンドをそのままコピーしてご利用ください。
- 直下の1階層のみを検索の対象とする(ディレクトリ自身を除く)
find 対象ディレクトリ -mindepth 1 -maxdepth 1
- 指定した階層以下を検索の対象とする
find 対象ディレクトリ -mindepth 2
- 指定した階層までを検索の対象とする
find 対象ディレクトリ -maxdepth 3
- 階層の範囲を指定して検索する
find 対象ディレクトリ -mindepth 3 -maxdepth 5
ディレクトリ階層(深さ)とは? #
Linuxにおけるディレクトリ「階層」とは、検索の起点となるディレクトリを 0 として、サブディレクトリに入るごとに 1 つずつ深くなる数値となります。
以下はディレクトリ構成による階層の例となります。
/var/www/ ← 0階層
├── html/ ← 1階層
│ ├── index.html ← 2階層
│ └── assets/ ← 2階層
│ └── style.css ← 3階層
└── logs/ ← 1階層
└── access.log ← 2階層
find コマンドでは、この階層の数値をオプションとして指定することで、検索対象を特定の階層に絞り込むことができます。
詳しい内容や指定方法は以降のセクションにて解説いたします。
-mindepthとは #
find コマンドの -mindepth は検索結果に含める最小階層(結果が表示されるスタート地点)を指定するオプションとなります。
指定した数値より浅い階層を検索対象から除外することができます。
例えば以下のようなディレクトリ構成があるとします。
/var/www/
├── html/
│ ├── index.html
│ └── assets/
│ └── style.css
└── logs/
└── access.log
上記の構成にて -mindepth 2 を指定した場合、/var/www/ 自体(0階層)や直下(1階層)は除外され、2階層目以降が検索対象となります。
find /var/www/ -mindepth 2
出力結果は以下となります。
/var/www/html/index.html
/var/www/html/assets
/var/www/html/assets/style.css
/var/www/logs/access.log
このように、/var/www/ 自身や html・logs ディレクトリ(1階層)は出力されず、2階層目以降のファイル・ディレクトリのみが検索結果に含まれていることが分かります。
-maxdepthとは #
-maxdepth は検索対象とする最大階層(終了地点)を指定するオプションとなります。
このオプションを指定することで数値より深い階層を検索対象から除外することができます。
先ほどと同じディレクトリ構成にて -maxdepth 1 を指定した場合、これらの出力結果は以下となります。
find /var/www/ -maxdepth 1
/var/www/
/var/www/html
/var/www/logs
検索対象は /var/www/ 自身と、その直下にある html ディレクトリ・logs ディレクトリまでとなり、2階層目は対象外となります。
-maxdepthと-mindepthを組み合わせる #
これらの両オプションを組み合わせることで、検索対象の階層を範囲で指定することができます。
例えば、2階層目のみを検索対象にしたい場合は以下のコマンドとなります。
find /var/www/ -mindepth 2 -maxdepth 2
出力結果は以下となります。
/var/www/html/index.html
/var/www/html/assets
/var/www/logs/access.log
実用例 #
では実際にどのようなケースでこれらの階層指定が活用されるかをご紹介します。
特定の拡張子のファイルを1階層のみ検索する #
-name オプションと組み合わせることで、直下のファイルのみを対象に拡張子で絞り込むことができます。
再帰的に検索すると時間がかかるような構成の場合などでは良く利用される方法となります。
検索範囲をあらかじめ絞り込むことができるため、サーバーへの負荷軽減としても有効です。
find /var/www/html -maxdepth 1 -name "*.html"
一定以上の深さにあるログファイルを検索する #
/var/log には httpd や mail のようにサービスごとのディレクトリが作成され、その配下にログファイルが格納されている場合が多くあります。
このようなサブディレクトリ配下のログファイルのみを対象にしたい場合は、以下のように -mindepth を使用します。
find /var/log -mindepth 2 -name "*.log"