ワイルドカードとグロブを使う

ShellBeginner
オンラインで実践に進む

はじめに

何百枚もの紙が散らばった、散らかった部屋を想像してください。

  • 宿題のプリント(math_hw.txt、english_hw.txt)があります。
  • 写真(pic1.png、pic2.png)があります。
  • ごみ(temp_1、temp_2)もあります。

写真をすべて箱に移したい場合、1 枚ずつ拾う必要はありません。「写真に見えるものをすべて拾って」と指示できます。

Linux では、これを ワイルドカード(グロブとも呼ばれます)で実現します。ワイルドカードは、トランプのジョーカーのように、ほかの文字の代わりになります。

この仕組みを使うと、個々の名前ではなくパターンを指定して操作できます。実際のシステムでは、一致するファイルが数十個、数百個、場合によっては数千個あることもあります。パターンによる選択は、シェルでの作業を大規模に行える理由の一つです。

この実験では、次の 2 つの強力な記号を学びます。

  1. アスタリスク(*):任意の長さの文字列を表します。
  2. 疑問符(?):1 文字を表します。

複数のファイルを選択する(*)

アスタリスク * は、最もよく知られたワイルドカードです。「0 文字以上の任意の文字列に一致する」ことを意味します。

散らかったフォルダーの中身を確認してみましょう。

ls

このコマンドでファイルを一覧表示できます。ここでは、テキストファイル(.txt で終わるファイル)だけを一覧表示したいとします。

ls notes.txt readme.txt report.txt のようにファイル名を一つずつ入力する代わりに、*.txt と入力します。

これは「.txt で終わるファイルをすべて探す」という意味です。

ls *.txt

出力:

notes.txt  readme.txt  report.txt

シェルは *.txt を確認し、すべてのテキストファイルに一致するファイル名へ展開しました。その結果、image.png などのファイルは除外されています。これで一覧を絞り込めました。

ここには重要な概念があります。ls コマンドが実行される前に、シェルがパターンを展開します。つまり、ls が受け取るのは、多くの場合、元の *.txt パターンではなく、完成したファイル名の一覧です。これが、ワイルドカードをさまざまなコマンドで使える理由です。

* を使ってファイルを移動する

次は、実際に役立つ操作を行います。data_2025.csv、data_2024.csv、data_old.log という複数のデータファイルがあるとします。

これらを整理するため、data_ で始まるすべてのファイルをバックアップフォルダーへ移動します。

まず、フォルダーを作成します。

mkdir backup

次に、ワイルドカードを使ってファイルを一度に移動します。data_* は、data_ で始まるすべての名前に一致します。

mv data_* backup/

これは Linux に対して、「data_ で始まるファイルはすべてバックアップフォルダーへ移動する」と指示しています。

ここで、ワイルドカードが実際の作業で役立ちます。一致するファイルごとにコマンドを繰り返すのではなく、命名規則を 1 回指定し、シェルに展開させることができます。

現在のディレクトリからファイルがなくなったことを確認します。

ls

続いて、ファイルがバックアップフォルダーに移動したことを確認します。

ls backup

成功です。1 つのコマンドで 3 つのファイルを移動できました。

1 文字を選択する(?)

アスタリスク * は貪欲なワイルドカードで、すべての候補を対象にします。場合によっては、より慎重に選択する必要があります。

疑問符 ? のワイルドカードは、ちょうど 1 文字を表します。

そのため、? は * よりも正確に指定できます。ファイル名の形式が決まっていて、意図せず想定より長い名前まで一致させたくない場合に便利です。

ここには temp_1、temp_2、temp_a という名前のファイルがあります。

  • temp_* は temp_1 と temp_very_long_name の両方に一致します。
  • temp_? は、アンダースコアの後にちょうど 1 文字ある場合にだけ一致します。

削除する前に、まずパターンを確認しましょう(これは常に良い習慣です)。

ls temp_?

一致するファイルは、temp_1、temp_2、temp_a です。

これで問題がないことを確認できたので、ファイルを削除します。

rm temp_?

削除されたことを確認します。

ls

この方法は、特定の命名規則に従うファイルを選択する場合にとても便利です。

このステップの安全な習慣は、覚えておく価値があります。rm や mv でパターンを使う前に、ls のような変更を行わないコマンドでパターンの一致結果を確認してください。パターンマッチングは強力なので、実行する前に対象を確認することが大切です。

まとめ

これで、パターンマッチングの力を使えるようになりました。

  • *(アスタリスク):「すべてに一致する」ワイルドカードです。種類でファイルを選択する場合(*.png)や、連続した名前のファイルを選択する場合(day_*)に適しています。
  • ?(疑問符):「1 文字」を表すワイルドカードです。正確に一致させたい場合(file_?.txt)に適しています。

これでモジュール 2 は終了です。次の操作方法を学びました。

  1. ファイルツリーを確認して移動する(pwd、cd、ls)。
  2. ファイルとフォルダーを作成する(touch、mkdir)。
  3. ファイルとフォルダーをコピー・移動する(cp、mv)。
  4. ファイルとフォルダーを削除する(rm、rmdir)。
  5. ファイルとフォルダーをまとめて選択する(*、?)。

次のモジュール 3 では、これらのファイルを開き、中のテキストを実際に読み取り、編集します。