Q1ワイルドカードの*は何に一致しますか?
ファイルを探す — find とワイルドカード
* ? []のワイルドカードで名前をまとめて指定する方法と、findの -nameで名前、-typeで種類を条件に探す方法を、ブラウザ端末で操作しながら学べます。
ワイルドカード — * ? []
ワイルドカードは、ファイル名の一部をまとめて指定するための記号です。
*は 0 文字以上の任意の並び、?はちょうど 1 文字、[]は角かっこ内のいずれか 1 文字に一致します。
ls *.txtのようにlsと組み合わせると、条件に合う名前だけを一覧できます。
*は任意の並び、?は 1 文字、[]は角かっこ内のいずれか 1 文字に一致します。| 記号 | 一致するもの | 例 | 一致例 |
|---|---|---|---|
* | 0 文字以上の任意の並び | *.txt | a.txt note.txt |
? | ちょうど 1 文字 | log?.txt | log1.txt(log10.txtは不一致) |
[...] | 角かっこ内のいずれか 1 文字 | log[12].txt | log1.txt log2.txt |
[a-c] | 範囲内のいずれか 1 文字 | f[a-c].txt | fa.txt fb.txt fc.txt |
touch a.txt b.txt note.log # 素材ファイルを作成
ls *.txt # a.txt b.txt
ls *.log # note.log
ls ?.txt # a.txt b.txt(1 文字 + .txt)
Linux console
0 / 3 実行済み
Loading Linux Terminal...
1 文字だけ・候補を絞る — ? と []
?は必ず 1 文字に一致するため、文字数まで指定したいときに使います。
[]は角かっこ内に書いた文字のどれか 1 つに一致し、[12]なら 1 か 2、[a-c]のように範囲も書けます。
*より細かく対象を絞り込めます。
touch log1.txt log2.txt log9.txt logA.txt # 素材を作成
ls log?.txt # 末尾が 1 文字の 4 件
ls log[12].txt # log1.txt log2.txt のみ
Linux console
0 / 3 実行済み
Loading Linux Terminal...
条件で探す — find -name / -type
findは起点ディレクトリ以下を再帰的にたどり、条件に合うものを探します。
find 起点 -name 'パターン'で名前を、-type f(ファイル)や-type d(ディレクトリ)で種類を条件にできます。
深い階層に埋もれたファイルを名前で探すときに使います。
| 条件 | 意味 | 例 |
|---|---|---|
-name 'パターン' | 名前がパターンに一致 | find . -name '*.log' |
-type f | 通常ファイルだけ | find . -type f |
-type d | ディレクトリだけ | find . -type d |
-nameは名前のパターン、-type fはファイル、-type dはディレクトリで絞り込みます。mkdir -p tree/sub # 素材ツリーを作成
touch tree/a.txt tree/sub/b.txt # 階層にファイルを配置
find tree -name '*.txt' # tree 以下の .txt を再帰検索
find tree -type d # tree 以下のディレクトリだけ
find のパターンはクォートで囲む
find . -name '*.txt'の'*.txt'はシングルクォートで囲みます。
囲まないと*をシェルが先に展開してしまい、意図と違う対象になることがあります。
-nameのパターンは引用符で囲んでfind自身に渡すのが基本です。
Linux console
0 / 5 実行済み
Loading Linux Terminal...
QUIZ
理解度チェック
まずは1問ずつ答えてみましょう。
Q2ls log[12].txtはどのファイルに一致しますか?
Q3find tree -type dを実行すると何が表示されますか?