複数パターンのファイルを一括削除する
index.quarto_ipynb および index.quarto_ipynb_*(_1, _2, …)に マッチする通常ファイルを,カレントディレクトリ以下から再帰的に検索し,まとめて削除する.
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) -delete各オプションの意味
| 要素 | 役割 |
|---|---|
. |
検索の起点となるディレクトリ.カレントディレクトリ以下を再帰的に走査する |
-type f |
検索対象を 通常ファイル に限定.ディレクトリやシンボリックリンクは除外される |
\( ... \) |
条件のグルーピング.シェルに括弧として解釈されないようにバックスラッシュでエスケープしている |
-name "..." |
ファイル名(パスではなく basename)に対するglobパターンマッチ.* などのワイルドカードを使う場合はクォートで囲み,シェル展開を防ぐこと |
-o |
OR 条件.デフォルトの結合は AND(暗黙の -a)なので,「いずれかにマッチ」を表現するには明示的に -o を使う |
-delete |
マッチしたファイルを その場で削除 するアクション.-exec rm {} \; よりも高速で安全(プロセスを起動しない) |
評価順序の注意点 1
find は -a(AND)が -o(OR)よりも優先順位が高いため,括弧でグループ化しないと意図しない条件評価になります.
## NG: -type f は最初の -name にしか効かず,2つ目の条件は -type f の制約を受けない
find . -type f -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" -delete
## OK: 括弧で OR 条件を1つの式にまとめてから -type f, -delete を適用する
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) -delete論理式として読み下すと,前者は
(-type f ∧ -name A) ∨ (-name B ∧ -delete)
となり,-delete が条件Bにマッチした すべてのファイル(ディレクトリ含む)に対して発動してしまう危険性があります.
評価順序の注意点 2
findの式は 左から順に評価 され,-deleteは条件ではなく「評価された時点で実行されるアクション」-deleteは必ず最後に置く
## NG: 名前判定の前に -delete が走り,docs/figures 以下が全部消える
find docs/figures -delete -name "*.png"
## OK: 条件をすべて書いた後に -delete を置く
find docs/figures -name "*.png" -delete論理式として読み下すと,前者は
-delete ∧ -name "*.png"
となり,-delete の左側に絞り込み条件がないため,docs/figures 以下の すべてのエントリ(docs/figures 自身を含む)に対して削除が実行されます.後ろの -name "*.png" は削除後に評価されるだけで,削除対象の絞り込みにはまったく効きません.
-delete を使うときの作法
## Step 1: 対象を確認
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) -print | wc -l
## Step 2: 問題なければ削除
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) -deleteExmaple 1 xargs rm で削除するパターン
-delete が使えない環境(古い find 実装)や,削除前にファイル一覧をパイプで他コマンドに渡したいときは xargs rm のパターンが使われます.
## NG: スペースや改行を含むファイル名で壊れる
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) | xargs rm
## OK: NUL区切りで安全に渡す
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) -print0 | xargs -0 rm| オプション | 役割 |
|---|---|
-print0 |
find 側の出力区切りを 改行 (\n) ではなく NUL文字 (\0) にする.ファイル名にスペース・改行・引用符が含まれていても安全 |
xargs -0 |
xargs 側の入力区切りを NUL文字として扱う.-print0 とセットで使う |
xargs -r |
入力が空のときコマンドを実行しない(GNU拡張).マッチが0件のときに rm がエラーになるのを防ぐ |
xargs -n N |
1回の rm 呼び出しに渡す引数の数を制限.デフォルトでは可能な限りまとめて渡される |
-delete vs xargs rm の使い分け
| 観点 | -delete |
xargs rm |
|---|---|---|
| プロセス起動 | find 内部で完結 |
rm を別プロセスとして起動 |
| 実行速度 | 速い | やや遅い(ただし xargs が引数をまとめるので -exec rm {} \; よりは速い) |
| ファイル名の安全性 | 安全 | -print0 + -0 でない場合,スペース・改行で破綻する |
| 削除前のフィルタリング | 不可 | 可能(grep などを挟める) |
| 移植性 | POSIX外(GNU/BSD find で利用可) |
POSIX準拠(-print0/-0 はGNU/BSD拡張) |
シンプルに削除したいだけなら -delete で十分.grep でさらに絞り込みたい,削除前後にログを取りたい,など パイプライン処理が必要な場合は xargs rm を選ぶ,という整理になります.
## 例: ファイル名に特定文字列を含むものだけを削除
find . -type f \( -name "index.quarto_ipynb" -o -name "index.quarto_ipynb_*" \) -print0 \
| grep -z '2025-' \
| xargs -0 -r rmglob パターンでファイル名・パスを指定する
docs/figures 以下から,fig_01.png のような 2 桁連番の図や,eda ディレクトリ配下の png を glob で検索する.
find docs/figures -type f -name "fig_[0-9][0-9].png" # fig_01.png など
find docs/figures -type f -path "*/eda/*.png" # eda 配下の pngglob を受け取るオプション
| オプション | マッチ対象 |
|---|---|
-name / -iname |
ファイル名 (basename) のみ.-iname は大文字小文字を無視 |
-path / -ipath |
起点からのパス全体 (find が出力するパス文字列,例: docs/figures/eda/a.png) |
使える記号
| 記号 | 意味 | 例 |
|---|---|---|
* |
任意の文字列 (0 文字以上) | "*.png" |
? |
任意の 1 文字 | "fig_?.png" → fig_1.png |
[...] |
文字クラス.[0-9],[a-z],[!0-9] (否定) など |
"fig_[0-9][0-9].png" |
- ブレース展開
{png,pdf}は使えない.ブレース展開はシェルの機能で,findの glob には存在しない.- クォートすれば
{png,pdf}という文字列そのものとして扱われ,何もマッチしない. - クォートしないとシェルが
-name fig.png fig.pdfに展開し,find: paths must precede expressionエラーになる. - 複数拡張子は
\( -name "*.png" -o -name "*.pdf" \)か,正規表現で書く.
- クォートすれば
**(globstar) はない.ただし-pathでは*が/にもマッチするので,"*/eda/*.png"はeda/sub/x.pngのような深い階層にもマッチする.-pathはパス全体への完全一致なので,起点のプレフィックスまで含めて書く.find docs/figures -path "eda/*.png"は先頭がdocs/figures/なのでマッチしない.先頭を*/にしておくのが無難.- パターンは必ずクォートする.クォートしないと,カレントディレクトリにマッチするファイルがあった場合にシェルが先に展開してしまう.
複数パターンのファイルを一括削除する with regex
index.quarto_ipynb および index.quarto_ipynb_1,index.quarto_ipynb_2 のような連番付きファイルを, 正規表現 1 本でまとめて検索する.
find . -type f -regex '.*/index\.quarto_ipynb.*$'各オプションの意味
| 要素 | 役割 |
|---|---|
-regex PATTERN |
パス全体 (basename ではなく find の起点からの相対パス全体) が PATTERN に完全一致するファイルを抽出 |
.*/ |
任意の深さのディレクトリ階層に対応する先頭部分.-regex はパス全体マッチなので,これが無いと ./index.quarto_ipynb のような直下のファイルにしかマッチしない |
index\.quarto_ipynb |
リテラルの index.quarto_ipynb.. は正規表現のメタ文字なのでバックスラッシュでエスケープする |
.*$ |
末尾に任意文字列 (_1, _copy など) が続いてもマッチさせるための部分.完全一致セマンティクスを満たすためにアンカーまで書ききる |
-regexは-nameと違ってパス全体への完全一致 (= 暗黙に^と$で囲まれる) として動作する.-regex 'index\.quarto_ipynb'だけでは絶対にマッチしない (パスが./...で始まるため).
.をエスケープし忘れてindex.quarto_ipynbと書くと,indexAquarto_ipynbのような別名にも誤マッチする.-regexのデフォルト方言は GNUfindではemacs(BRE 相当) で,+や?,|,{m,n}はそのままでは使えない.拡張正規表現を使いたいときは-regextype posix-extendedを明示する.- macOS (BSD
find) には-regextypeがない.拡張正規表現を使うときはfind -E <dir> -regex ...のように-Eを起点ディレクトリより前に書く.
## NG: パス全体と一致しない
find docs/figures -regex 'fig_[0-9]+\.png'
## OK: 先頭に .*/ を付け,ERE を明示する
find docs/figures -regextype posix-extended -regex '.*/fig_[0-9]+\.png'
## 複数拡張子を 1 本の正規表現でまとめて削除 (glob のブレース展開の代わり)
find docs/figures -regextype posix-extended -type f -regex '.*\.(png|pdf|svg)' -delete正規表現の方言を切り替える
GNU find は -regextype でバックエンドの正規表現エンジンを選べる.代表的なのは次の 3 つ:
## デフォルト (emacs / BRE 相当): + や | はリテラル扱い
find . -regextype emacs -regex '.*/index\.quarto_ipynb.*$'
## POSIX 拡張正規表現: +, ?, |, {m,n} がメタ文字として効く
find . -regextype posix-extended -regex '.*/index\.quarto_ipynb(_[0-9]+)?$'
## POSIX 基本正規表現: + や ? はエスケープしないとリテラル
find . -regextype posix-basic -regex '.*/index\.quarto_ipynb.*$'-regextype は最初の -regex / -iregex より前に置く必要がある (パース時に方言が確定するため).
-regex vs -name の使い分け
| 観点 | -name (glob) |
-regex (正規表現) |
|---|---|---|
| マッチ対象 | basename (ファイル名のみ) | パス全体 (起点からの相対パス) |
| マッチ方式 | glob パターン (*, ?, [...]) |
正規表現 (方言は -regextype で指定) |
| 完全一致 / 部分一致 | basename への完全一致 | パス全体への完全一致 (= 暗黙の ^...$) |
| OR 条件 | \( -name A -o -name B \) で表現 |
(A|B) を posix-extended で 1 本にまとめられる |
| 大文字小文字を無視 | -iname |
-iregex |
| 直感性 | 高い (シェルと同じ感覚で書ける) | 低め (パス先頭の .*/ を忘れやすい) |
ファイル名だけで判別できるケースは -name を選んだほうがシンプル.ディレクトリ階層も条件に入れたい (例: posts/2025-*/index.quarto_ipynb 系のみ削除) ときに -regex の真価が出る.
Exmaple 2 安全な削除手順
-regex 版でも作法は -name 版と同じ.まずマッチ対象を必ず目視確認してから -delete する.
## Step 1: マッチするパスを確認
find . -type f -regex '.*/index\.quarto_ipynb.*$' -print
## Step 2: 件数を数える
find . -type f -regex '.*/index\.quarto_ipynb.*$' -print | wc -l
## Step 3: 問題なければ削除
find . -type f -regex '.*/index\.quarto_ipynb.*$' -delete-exec でマッチしたファイルにコマンドを適用する
ディレクトリ以下にある通常ファイルすべてに実行権限を付与する.
## \; 版: ファイルごとに chmod を 1 回ずつ実行
find ~/shellutils/bin -type f -exec chmod +x {} \;
## + 版: ファイルをまとめて chmod に渡す(通常はこちら推奨)
find ~/shellutils/bin -type f -exec chmod +x {} +\; と + の違い
-exec command {} \; と -exec command {} + はどちらも「マッチしたファイルに対してコマンドを実行する」アクションだが,コマンドの起動回数が異なる.
| 終端子 | 動作 | プロセス起動回数 | 用途 |
|---|---|---|---|
\; |
マッチしたファイル 1 件ごと にコマンドを 1 回実行する | マッチ件数と同じ | 終了コードをファイルごとに確認したい,コマンド側が複数引数に非対応など |
+ |
マッチしたファイルをできるだけまとめて 1 コマンドに渡す(xargs 相当) |
はるかに少ない(コマンドライン長の上限まで引数を積む) | 速度優先・chmod/chown など複数引数対応コマンド |
+ 版は xargs と同じ方式でコマンドラインを構築するため,\; 版より大幅に高速になる.ただし {} は引数リストの末尾に 1 か所だけ置けるという制約がある(GNU find の仕様).
\;の\はシェルに;を解釈させないためのエスケープ.+版では{}の直後に+を置く必要があり,{}+のようにスペースを省略することは できない.
{}(プレースホルダ)の意味
{} は find がマッチしたパスに置き換える特殊文字列(プレースホルダ). \; 版では引数の任意の位置に複数回書けますが,+ 版では末尾に 1 か所だけという制約があります.
## \; 版: {} を複数回使ってよい
find . -type f -exec echo "Found: {} → processing {}" \;
## + 版: {} は末尾に 1 か所だけ(複数書くとエラー)
find . -type f -exec chmod +x {} +条件を追加して対象を絞り込む
「拡張子 .sh だけ」「まだ実行権限がついていないファイルだけ」のように対象を絞るには,-name や -perm を組み合わせる.
## 拡張子 .sh のファイルだけ
find ~/shellutils/bin -type f -name "*.sh" -exec chmod +x {} +
## 実行権限(u+x)がまだないファイルだけ
## -perm /0111 → u/g/o のいずれかに実行ビットが立っている
## ! -perm /0111 → いずれにも実行ビットがない(= 対象外 の否定 = 対象)
find ~/shellutils/bin -type f ! -perm /0111 -exec chmod +x {} +
## 拡張子 .sh かつ実行権限なし
find ~/shellutils/bin -type f -name "*.sh" ! -perm /0111 -exec chmod +x {} +-perm の書き方
| 書き方 | 意味 |
|---|---|
-perm mode |
パーミッションビットが 完全一致 する |
-perm -mode |
指定したビットが すべて セットされている(AND マスク) |
-perm /mode |
指定したビットの いずれか がセットされている(OR マスク) |
! -perm /mode |
指定したビットが 1 つもセットされていない(NOT + OR マスク) |
-perm /0111 は「u・g・o のいずれかに実行ビットが立っている」という意味で, ! -perm /0111 はその否定(= 誰にも実行権限がない)となる.
Exmaple 3 実行前の確認手順
-exec chmod は取り消しが難しいため,まず -print で対象ファイルを目視確認してから実行するのが安全です.
## Step 1: 対象を確認
find ~/shellutils/bin -type f ! -perm /0111 -print
## Step 2: 件数を数える
find ~/shellutils/bin -type f ! -perm /0111 -print | wc -l
## Step 3: 問題なければ実行
find ~/shellutils/bin -type f ! -perm /0111 -exec chmod +x {} +-exec vs xargs の使い分け
| 観点 | -exec {} + |
xargs |
|---|---|---|
| 記述のシンプルさ | 高い(find 1 本で完結) |
やや複雑(-print0 + xargs -0 が推奨) |
| ファイル名の安全性 | 安全(find が直接渡す) |
-print0 / -0 が必要 |
| パイプでの加工 | 不可 | grep などを挟める |
| プロセス起動 | find 内部 |
xargs を別プロセスとして起動 |
単純にファイルに操作をかけるだけなら -exec {} + で十分. grep でさらに絞り込む,操作前後にログを取るなど,パイプライン処理が必要な場合は xargs を選ぶ.
更新時刻で絞り込む: -mtime / -mmin
最終更新から 7 日より古い通常ファイルを検索する.
find . -type f -mtime +7find はファイルのタイムスタンプを条件に使える.-mtime は「最終更新 (modification time) から何日経ったか」で絞り込むテストで, 経過時間を 24 時間単位で切り捨てた日数 n と比較する.
| 書き方 | 意味 |
|---|---|
-mtime +7 |
経過日数 n > 7 (切り捨てなので,実質 8 日以上前に更新) |
-mtime -7 |
経過日数 n < 7 (直近 7 日以内に更新) |
-mtime 7 |
経過日数 n = 7 (7 日以上 8 日未満前に更新) |
-mmin +60 |
分単位版.60 分より前に更新 |
-mmin -60 |
直近 60 分以内に更新 |
見ているタイムスタンプの種類
| テスト | タイムスタンプ | 更新されるタイミング |
|---|---|---|
-mtime / -mmin |
mtime (modification time) | ファイルの中身を書き換えたとき |
-atime / -amin |
atime (access time) | ファイルを読んだとき (relatime マウントでは更新が間引かれる) |
-ctime / -cmin |
ctime (status change time) | 中身に加えて,権限・所有者・名前などのメタデータを変えたとき |
-newer FILE |
FILE の mtime との比較 | FILE より後に更新されたファイルにマッチ |
+7は「7 日以上」ではなく,切り捨て後の日数が 7 より大きい,つまり実質 8 日以上前を意味する.境界をきっちり指定したいときは-mminを使う.-mtimeは 更新時刻 を見る.cp(-pなし) やgit checkoutで mtime が新しくなったファイルは,中身が古くても「新しい」と判定される.
Exmaple 4 データ分析プロジェクトでの活用例
## 古い中間生成物だけ消す: data/interim 以下の parquet のうち 8 日以上前のもの
find data/interim -type f -name "*.parquet" -mtime +7 -print # まず確認
find data/interim -type f -name "*.parquet" -mtime +7 -delete
## 直近 1 時間にパイプラインが書き出したファイルを確認する
find data/processed -type f -mmin -60
## 生データより古い (= 再生成が必要な) 加工済みファイルを探す
find data/processed -type f ! -newer data/raw/latest.csvサイズで絞り込む: -size
500 MiB を超える通常ファイルを検索する.
find . -type f -size +500M| 書き方 | 意味 |
|---|---|
-size +500M |
500 MiB を超える |
-size -10k |
10 KiB 未満 (下記の切り上げに注意) |
-size 0 |
0 バイト (-empty でも同じ.-empty は空ディレクトリにもマッチする) |
| 単位 | c (バイト), k (KiB), M (MiB), G (GiB).省略すると 512 バイトブロック |
-sizeはファイルサイズを指定単位で切り上げてから比較する.-size -1Mは「1 MiB 未満」ではなく「切り上げて 0 MiB」,つまり空ファイルにしかマッチしない.小さい閾値は-size -1024kのように細かい単位で書く.- 単位を省略した
-size +100は 100 バイトではなく 100 ブロック (= 51200 バイト) の意味になる.バイト指定はcを付ける.
Exmaple 5 データ分析プロジェクトでの活用例
## 巨大ファイルを確認する: サイズを人間が読める形式で表示
find data -type f -size +500M -exec ls -lh {} +
## 大きい順に並べる
find data -type f -size +500M -exec du -h {} + | sort -hr
## 書き出しに失敗した空の出力ファイルを探す
find outputs -type f -empty探索を打ち切る: -prune
.venv と .git の中は探索せずに,.py ファイルを検索する.
find . \( -name ".venv" -o -name ".git" \) -prune -o -type f -name "*.py" -print-prune は「マッチしたディレクトリの中には潜らない」ことを find に指示するアクションで,評価結果は常に真になる. 探索そのものを打ち切るので,巨大な .venv や node_modules を除外すると検索が速くなる.
A -prune -o B -print の読み方
find . \( -name ".venv" -o -name ".git" \) -prune -o -type f -name "*.py" -print論理式として読み下すと
(除外条件 ∧ -prune) ∨ (検索条件 ∧ -print)
となる.
- 除外条件にマッチしたディレクトリ:
-pruneが真を返すので-oの右側は評価されず,中にも潜らない - それ以外: 左側が偽になり,右側の検索条件で判定される
- 末尾の
-printを省略すると,暗黙の-printが式全体にかかり,除外したはずの./.venvや./.git自体が出力される.-prune -oを使うときは右側に必ずアクションを明示する. -pruneは-depthが有効なときは効かない.-deleteは暗黙に-depthを有効にするため,-pruneと-deleteは組み合わせられない.
中身のあるディレクトリを消す: -prune + -exec rm -rf
-prune は「これから消すディレクトリの中を探索しない」用途にも使える. -delete はディレクトリに対しては rmdir 相当の動作しかせず,空のディレクトリしか消せないため,中身ごと消すときは -exec rm -rf {} + を使う.
## NG: 中身があるので消えない
find . -type d -name "__pycache__" -delete
## find: cannot delete './a/__pycache__': Directory not empty
## NG: -prune なしで \; を使うと,削除直後に find が中へ潜ろうとしてエラーになる
find . -type d -name "__pycache__" -exec rm -rf {} \;
## find: './a/__pycache__': No such file or directory
## OK: -prune で中に潜らず,rm -rf でまとめて削除する
find . -type d -name "__pycache__" -prune -exec rm -rf {} +Exmaple 6 データ分析プロジェクトでの活用例
## Jupyter / Python のゴミ掃除
find . -type d -name ".ipynb_checkpoints" -prune -exec rm -rf {} +
find . -type d -name "__pycache__" -prune -exec rm -rf {} +
## 上の 2 本を 1 本にまとめ,まず対象を確認してから削除する
find . -type d \( -name ".ipynb_checkpoints" -o -name "__pycache__" \) -prune -print
find . -type d \( -name ".ipynb_checkpoints" -o -name "__pycache__" \) -prune -exec rm -rf {} +
## .venv と data を除外して notebook を一覧する (data 以下の大量ファイルを走査しない)
find . \( -name ".venv" -o -path "./data" \) -prune -o -type f -name "*.ipynb" -printAppendix: Linuxのファイル
Linuxで扱われるオブジェクトは大きく分けると4つあります
| 種類 | 説明 | 代表例 | 補足 |
|---|---|---|---|
| 通常ファイル | データそのものを格納するファイル | .txt, .csv, .py, バイナリ |
テキストも実行ファイルも同じ分類 |
| ディレクトリ | ファイルや他のディレクトリを管理するための入れ物 | /home, /etc, /usr |
中身は「名前 → inode」の対応表 |
| リンクファイル | 別のファイルやディレクトリへの参照 | /bin -> /usr/bin |
ハードリンクやシンボリックリンク |
| 特殊ファイル | デバイスや IPC(入出力・通信)をファイルとして抽象化したもの(デバイスファイル) | /dev/sda, /dev/null |
ブロックデバイス(b) や キャラクタデバイス(c)など |
Linuxでは,すべてをファイルで表します.コンピューターに接続されているデバイス(キーボード・モニタ・プリンタなど)は それぞれ対応したデバイスファイルで表されます.
ls コマンドを ls -F --color=auto のように設定した上で実行すると
- 通常ファイル: 白色
- ディレクトリ: 青色
- リンクファイル(シンボリックリンク): 水色
- 特殊ファイル: 黄色
というように表示されます.(他にも圧縮ファイルは赤色,実行ファイルは緑色など)
Windowsとの差違
Windowsでは,.txt,.exe といった拡張子が意味を持ち,アプリケーションと関連付けられていますが,Linuxではファイル名の一部に過ぎないです. Linuxではあくまで中身を見てから判断するという思想で,なにかしらの実行ファイルがどの言語で実行可能なのか?とかはshebang
#!/bin/bashで記述する場面のほうが多いと思います.ただし,拡張子はどんな種類のファイルなのかの目安になるほか,
ls -Xのように ls コマンドでは -X を付与することで拡張子アルファベット順でファイルをソート表示できるので,ディレクトリの整理整頓という観点では 拡張子を含めファイルに適切な名前を付与することはLinuxでも重要です.
Appendix: 用語集
glossary:
- def: NUL文字
description: |
文字コード 0 の制御文字で,`\0` と表記される.
Linux のファイル名には `/` と NUL文字以外のすべての文字(スペース・改行・引用符を含む)を使えるため,
NUL文字はファイル名の区切りとして絶対に衝突しない唯一の文字である.
`find -print0` と `xargs -0` はこの性質を利用して,ファイル名を安全に受け渡す.
- def: ブレース展開 (brace expansion)
description: |
`{a,b,c}` や `{1..5}` のような記述を,コマンド実行前に複数の単語へ展開するシェル (bash, zsh) の機能.
例えば `ls *.{png,pdf}` はシェルによって `ls *.png *.pdf` に展開されてから実行される.
展開はシェルが行うため,クォートして `find` に渡した文字列には適用されない.
- def: globstar
description: |
`**` を「0 個以上のディレクトリ階層」にマッチさせる bash のオプション.`shopt -s globstar` で有効化する
(zsh ではデフォルトで有効).例えば `ls **/*.png` でカレントディレクトリ以下すべての `.png` を列挙できる.
シェルの機能であり,`find` の `-name` / `-path` の glob パターンには存在しない.
- def: -regextype posix-extended
description: |
GNU `find` で `-regex` / `-iregex` が解釈する正規表現の方言を POSIX 拡張正規表現 (ERE) に指定するオプション.
ERE では `+`, `?`, `|`, `()`, `{m,n}` をエスケープなしでメタ文字として使える.
最初の `-regex` より前に置く必要がある.BSD `find` (macOS) では代わりに `find -E` を使う.
- def: MiB (メビバイト)
description: |
2 の累乗に基づく情報量の単位で,1 MiB = 1024 KiB = 1,048,576 バイト.
SI 接頭辞の MB (1 MB = 1,000,000 バイト) と区別するために IEC が定めた 2 進接頭辞.
`find -size` の `k`, `M`, `G` はそれぞれ KiB, MiB, GiB を意味する.