find -mindepthオプションの使い方を完全ガイド!検索の最小深さを指定して効率よくファイル検索
生徒
「Linuxのfindコマンドって、階層が深いフォルダまで全部検索しちゃいますよね?」
先生
「その通り。でも、検索の開始する深さを決めることもできるよ。」
生徒
「えっ、深さを決めるってどういうことですか?」
先生
「-mindepthというオプションを使えば、ある階層より浅い場所は検索対象から除外できるんだ。詳しく見てみよう!」
1. find -mindepthオプションとは?
-mindepthオプションは、Linuxのfindコマンドにおいて「この深さから検索を始めてほしい」と指定できる機能です。
通常のfindコマンドは、指定したディレクトリ自身(深さ0)からすべての階層を検索しますが、-mindepthを使えばカレントディレクトリは無視して、下の階層だけを検索できます。
2. ディレクトリの「深さ」の考え方
Linuxでは、フォルダ構造を「階層(深さ)」として数えます。例:
~/(検索開始場所)→ 深さ0~/Pictures/→ 深さ1~/Pictures/Trip/→ 深さ2
-mindepthは、「何階層目から検索を開始するか」を指定できます。
3. -mindepth 1でカレントディレクトリを除外
カレントディレクトリを検索対象に含めたくないときは、-mindepth 1を使います。
find . -mindepth 1 -type f
./subdir1/file1.txt
./subdir2/file2.txt
この例では、./直下にあるファイル(例:./readme.md)は表示されません。
4. -mindepthと-maxdepthをセットで使う
-mindepthと-maxdepthを組み合わせることで、特定の階層だけを検索できます。
たとえば、1階層目だけ(直下のフォルダだけ)を検索したいとき:
find . -mindepth 1 -maxdepth 1 -type d
./folderA
./folderB
このようにすることで、2階層以上のディレクトリは検索対象から外れます。
5. -mindepthを使って削除対象を限定する
findで削除するときに、-mindepthを使えばルートディレクトリやカレントディレクトリ自体を誤って削除することを防げます。
find . -mindepth 1 -type f -name "*.log" -delete
このように書くと、「ログファイルは削除するけど、カレントディレクトリの他のファイルやディレクトリは守る」ことができます。
6. サブディレクトリだけを対象に検索したいとき
カレントディレクトリを除いて、サブディレクトリ内のファイルだけを調べたいときにも便利です。
find ~/Projects -mindepth 2 -type f
/home/user/Projects/App1/src/main.java
/home/user/Projects/App2/src/index.js
この例では、Projects直下にあるファイルは無視され、さらに深い場所だけが対象になります。
7. -mindepthの数値は0からスタート
-mindepthに指定できる数値は、基本的に「0以上の整数」です。意味は以下の通り:
-mindepth 0:カレントディレクトリからすべて検索(指定なしと同じ)-mindepth 1:カレントディレクトリ除外-mindepth 2:2階層目から検索
深さを明確に指定することで、検索結果の精度が高まります。
8. findコマンドの処理負荷を減らす効果も
-mindepthを使えば、不要な浅い階層を無視できるため、検索対象が減り、処理時間の短縮にもつながります。
特に大量のファイルがある環境では、無駄な検索を避けることでシステムへの負荷を軽減できます。
9. -mindepthと他の条件の併用例
例えば、2階層目以降にある.bakファイルを探して削除する場合:
find . -mindepth 2 -type f -name "*.bak" -delete
このように細かく条件を組み合わせることで、安全で効率的なファイル管理が可能になります。
10. -mindepthと-maxdepthの違いを理解しよう
よく似ている-maxdepthとの違いを理解しておきましょう。
-mindepth:これより浅い階層は検索しない(最低深さ)-maxdepth:これより深い階層は検索しない(最大深さ)
この2つを組み合わせると、「指定した深さだけを検索」という使い方もできます。