Linuxを整える
中級find コマンドを整える。
= 名前・更新日時・サイズ・除外を選ぶと、find コマンドがその場で組み上がる
find が初めての方は、先に そもそも find とは・どんな場面で使うか をどうぞ。
結果
find . -print
各トークンの意味
- 当たり 条件に合う
- 除外 -prune で中へ入らない
- 対象外 条件に合わない
- 未探索 深さ・除外で見ていない
※ これは固定の見本の木で、あなたの実際のフォルダではありません(入力は端末の外へ出ません)。起点ディレクトリの欄は見本には反映されず、見本の起点は . です。-newer は見本に比べるファイルが無いので判定しません。更新日時・サイズ・権限は見本ごとに決めた値です。
そもそも find とは
条件を指定して、ファイルを探し出す道具。
find は、指定したフォルダを根元から順にたどって、名前・種類・大きさ・更新日時などの条件に合うファイルやフォルダを見つけ出すコマンドです。名前のとおり、「見つける」ための道具です。
grep がファイルの「中身」を探すのに対して、find はファイルそのものを探します。見つけたものに対して、-exec で別のコマンドを実行したり、-delete で消したりもできます。
どこで・どんな場面で使うか
-
古いログを探して片付けるとき
-mtimeで更新から日数がたったファイルを探し、容量を空けます。 -
容量の大きいファイルを探すとき
-sizeで、ディスクを圧迫している大きなファイルを見つけます。 -
名前をうろ覚えのとき
-nameに*を使って、拡張子や一部の文字から探します。 -
最近変わったファイルを調べるとき
障害の直前に更新されたファイルを探すと、原因の手がかりになることがあります。
-
見つけたファイルをまとめて処理するとき
-execで、権限の変更などを該当するファイルすべてに一度に行います。
知らないと何が困るか
- 手作業で探す時間がかかる。何千ものファイルから目で探すのは現実的ではありません。条件を書けば、数秒で見つかります。
- 消す前の確認を忘れる。
-deleteは元に戻せません。先に-printで対象を確かめる習慣が、事故を防ぎます。 - ディスクがいっぱいで動かなくなる。何が容量を食っているかを素早く見つけられないと、サービスが止まったままになります。
上のツールで条件を選んで、find のコマンドが組み立てられる様子を見てみてください。
find の基礎・5つの理解
オプションの多さに迷わない、findの読み方。
- 1
式は左から評価される。-o(OR)は -a(AND・省略可)より弱い
find の条件(テスト)は基本的に
-a(AND・省略すると暗黙に付く)で並び、左から順に評価されます。-o(OR)は-aより結合が弱いため、-name '*.log' -o -name '*.txt' -type fは「(*.logに一致) OR (*.txtに一致 AND ファイル)」と解釈されがちです。意図通りの優先順位にしたいときは\( … \)(シェルのメタ文字なので括弧はエスケープかクォートが必要)でグループ化します。 - 2
-mtime -7 は「7日以内」、+7 は「7日より前」——境界は24時間単位
-mtime -7は「更新から7×24時間未満(直近7日以内)」、-mtime +7は「更新から7×24時間より前」を意味します。符号なしの-mtime 7は「ちょうど7日目(7×24時間以上8×24時間未満)」というピンポイントな範囲になり、直感とズレやすい部分です。分単位で同じ考え方をするのが-mminです。 - 3
-exec … {} \;と-exec … {} +の違いは「起動回数」\;で終わる形は、見つかったファイル1件ごとにコマンドを1回ずつ起動します(件数が多いと遅い)。+で終わる形は、複数のファイルをまとめて(コマンドライン長の上限に収まる範囲で)1回、または少ない回数で渡すため高速です。ただし+は必ず末尾(コマンドの最後の引数)に置く必要があります。同じ発想で NUL区切りの一括処理をするのが-print0 | xargs -0で、空白や改行を含むファイル名でも安全に扱えます。 - 4
安全に消す手順——まず -print で対象を確認し、変えるのは末尾だけ
-deleteは取り消せません。同じ条件のまま末尾を-printにしたコマンドを先に実行し、表示された一覧が本当に消してよいものかを目視で確認してから、末尾だけ-deleteに置き換えるのが基本の手順です。-prune(除外)と-deleteの組み合わせは特に事故が知られているため、①で警告が出た場合は手順を分けることを検討してください。 - 5
macOS(BSD find)と GNU find(Linux)は同じ見た目でも中身が違う
macOS標準の find は BSD 系で、GNU find(多くのLinuxディストリの標準)にある
-regextype・-printf・-deleteの一部挙動などが無い、または引数の書き方が違うことがあります(例:-maxdepthの位置に関する制約はBSD系の方が厳しめ)。逆に-permや-pruneの基本的な使い方は共通です。移植性を気にする場合はman findで手元の実装を確認してください(本ページはGNU find準拠で解説しています)。
find(名前・時刻・サイズ・パーミッションによる検索、-exec・-delete)は LPIC-1 / LinuC レベル1の頻出テーマです。コマンド生成もフラグの意味も、すべてあなたのブラウザの中(純JavaScript)で完結し、入力はサーバへ送信されません(送信ゼロ)。
このツールについて
「更新日時」「サイズ」「除外」「削除」……findのオプションを毎回ググっていませんか。条件を選ぶだけでfindコマンドをその場で生成し、ワンクリックでコピーできます。各フラグの意味は1行ずつ解説し、-deleteのような取り消せない操作には警告を出します。入力はこの端末から一切出ません(送信ゼロ)。
起点・名前・種別・-mtime/-mmin(符号の意味も解説)・サイズ・パーミッション・node_modules 除外などを選ぶと find コマンドを自動生成。-delete を選ぶと取り消せない旨の警告が出ます。
主な機能
- -name/-type/-mtime/-size/-perm/-maxdepth などを入力欄で組み立て
- 除外は -path … -prune -o … -print の定型を自動生成
- アクション(-print/-print0 と xargs -0/-exec/-delete)と危険な組み合わせの警告
- よく使う10本のプリセット
- find の評価順・{} \; と {} + の違い・BSD と GNU の違いを解説・送信ゼロ
- 見本の木で、条件に当たるファイルを光らせて確認
よくある質問
Q. -mtime -7 と -mtime +7 の違いは何ですか?
A. -7 は「更新から 7×24 時間未満(直近7日以内)」、+7 は「7×24 時間より前」です。符号なしの -mtime 7 は「ちょうど7日目」という狭い範囲になります。
Q. 見つけたファイルをまとめて削除しても大丈夫ですか?
A. -delete は取り消せません。まず同じ条件のまま末尾を -print にして対象を目視で確認し、意図どおりであることを確かめてから -delete に置き換えることを勧めます。除外(-prune)と -delete の組み合わせは事故が知られているため、このツールでは警告を出します。
Q. macOS の find と Linux の find は同じですか?
A. 違います。macOS 標準は BSD 系で、GNU find にある -regextype や -printf などの一部の機能や書式が異なります。このツールは GNU find を前提に解説しています。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。
続けて整える
この内容は、研修でも扱っています
totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。