find コマンド生成(名前/日時/サイズ/種別)

起点パス・-name/-iname・-type・-mtime/-mmin・-size・-user・-perm・-maxdepthなどの条件をフォームで選ぶだけで、-exec/-delete/xargs付きの安全なfindコマンドを1行生成します。

find . -type f

生成された条件の意味

    落とし穴: -delete は式の中で最後に置かないと、そこで即座に削除が実行されてしまい後続の条件(-name や -type など)が効きません(find は式を左から評価し、-delete 自体が真を返すため)。-mtime +7 は「7日より新しい/古い」の境界を1日分丸めるため実際には「8日以上前」を意味します(find(1) の仕様)。ファイル名にスペースが含まれる場合は -print0 | xargs -0(NUL区切り)または -exec CMD {} \; を使うと単語分割で壊れません。

    GNU find と BSD/macOS find の違い: GNU findutils は -printf・-regextype・-samefile などの拡張を持つが、macOS 標準の BSD find には無い(Homebrew の findutils を gfind として入れると GNU 版を使える)。GNU find は起点パス省略時にカレントディレクトリを補うが、BSD find は起点パスの省略を許さない実装がある。-iname と -delete はいずれも現行の GNU/BSD 双方で利用可能。

    使い方

    1. 起点パス、名前パターン、種別、更新日時、サイズなどの条件を入力すると find コマンドが自動生成される。
    2. 必要な条件だけ入力すればよい(空欄の項目は無視される)。
    3. 最後に -exec・-delete・xargs などの後段アクションを選ぶと実行用コマンドまで組み上がる。
    4. 「コマンドをコピー」で生成結果をそのまま貼り付けて実行できる。

    仕組み・計算式

    find(1) の仕様通り、条件(テスト)を左から順に並べて論理積(AND)で評価する構文を組み立てている。-mtime n は最終更新から n*24 時間の経過を判定するが、経過時間を24時間単位で切り捨てて比較するため、-mtime +7 は実際には8日以上前に更新されたファイルを指す(find(1) の -mtime の項に明記)。-size は n[ckMG](c=バイト、k=KiB、M=MiB、G=GiB)で +/- により大小を指定する。-perm mode は完全一致、-perm -mode は指定ビットを全て含む、-perm /mode は指定ビットのいずれかを含む場合にマッチする。

    現場の落とし穴:-delete は「一致したら削除して真を返す」テスト兼アクションのため、式の途中に置くと find が左から評価する過程でそこに到達した時点で即座に削除され、後ろに書いた -name などの条件は削除を止める役に立たない。まず -delete を外して一致対象を確認してから最後に追加するのが安全。素のパイプ出力ではなく -print0 | xargs -0 を使えば、スペースを含むファイル名でも単語分割で壊れない。

    よくある質問

    Q. GNU find と macOS(BSD)find で同じコマンドが使えますか?

    A. -name・-type・-mtime・-size・-delete などの基本的なテストは共通だが、-printf や -regextype は GNU findutils 独自で BSD find には無い。

    Q. -maxdepth はどこに置くべきですか?

    A. 探索の深さを制御するグローバルオプションのため、find(1) は他のテストより前(起点パスの直後)に置くことを推奨しており、このツールも自動でその位置に生成する。

    Q. -exec の {} + と {} \; はどちらを使うべきですか?

    A. {} \; は1件ごとにコマンドを起動し確実だが遅く、{} + はまとめて1回の呼び出しに渡すため高速(xargs に近い)。対象が多い場合は {} + が有利。

    関連ツール

    最終更新・根拠の確認日: 2026-09-10 · カテゴリ: Linux・サーバー