Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

find

『find』はディレクトリツリーを再帰的に検索してファイルを探すコマンドです。名前・種類・更新日時・サイズなど様々な条件で絞り込むことができ、見つかったファイルに対してコマンドを実行する強力な機能も持っています。

構文
find 検索開始パス [オプション] [条件] [アクション]
オプション・条件一覧
オプション / 条件概要
-name "パターン"ファイル名がパターンに一致するものを検索します(ワイルドカード使用可)。
-iname "パターン"大文字小文字を区別せずにファイル名を検索します。
-type f通常ファイルのみを検索します。
-type dディレクトリのみを検索します。
-type lシンボリックリンクのみを検索します。
-mtime nn日前に更新されたファイルを検索します。+n は「n日以前」、-n は「n日以内」。
-newer ファイル指定ファイルよりも新しいファイルを検索します。
-size n[cwbkMG]ファイルサイズで絞り込みます(例:-size +1M で1MB以上)。
-maxdepth n検索するディレクトリの深さをn階層に制限します。
-mindepth nn階層より浅いエントリをスキップします。
-empty空のファイルまたはディレクトリを検索します。
-exec コマンド {} \;見つかったファイルそれぞれにコマンドを実行します。
-exec コマンド {} +見つかったファイルをまとめてコマンドに渡します(効率的)。
-delete見つかったファイルを削除します。
! 条件条件を否定します。
サンプルコード

以下のディレクトリ構造を例に説明します。

📁 ~/project/ 📁 docs/ 📄 readme.txt 📁 src/ 📄 app.php 📄 helper.php 📁 tmp/ 📄 cache.tmp 📄 debug.tmp 📁 notes/ 📄 todo.txt 📄 demo.mp4 (5MB) 📄 archive.tar.gz (2MB)

カレントディレクトリ以下の『.txt』ファイルを検索します。

find . -name "*.txt"
./docs/readme.txt
./notes/todo.txt

ディレクトリだけを一覧表示します。

find . -type d
.
./.git
./docs
./src
./tmp
./notes

1MB以上のファイルを検索します。

find . -type f -size +1M
./demo.mp4
./archive.tar.gz

7日以内に更新されたファイルを検索します。

find . -type f -mtime -7

見つかったファイルを『ls -lh』で詳細表示します。

find . -name "*.php" -exec ls -lh {} \;
-rw-r--r-- 1 user staff 4.2K Mar  5 10:00 ./src/app.php
-rw-r--r-- 1 user staff 1.8K Mar  5 09:30 ./src/helper.php

『.tmp』ファイルをすべて削除します。

find . -name "*.tmp" -delete
ls tmp/

『.git』ディレクトリを除外して『.php』ファイルだけを検索します。

find . -name ".git" -prune -o -name "*.php" -print
./src/app.php
./src/helper.php

空ファイルを一覧表示します。

find . -empty -type f

検索の深さを制限します。カレントディレクトリ直下のみ(1階層)を検索します。

find . -maxdepth 1 -name "*.txt"
概要

『find』は非常に強力なコマンドですが、条件の組み合わせが複雑になる場合は『-exec』に代えて『|』でパイプして『xargs』に渡すほうがシンプルに書けることがあります。

ファイル名でテキストを検索したい場合は『find』ではなく『grep -r』を使います。ファイルの一覧表示は『ls』も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。