12.3 ファイル名の展開

初心者は GUI の方が使いやすいと感じますが,熟練者は CUI を使うことも多くあります.一般に,大量のデータを扱う複雑な作業では CUI の方が便利であると言われています.例として,シェルのファイル名展開機能を見てみましょう.

ファイルの数が多くなってくると,それをすべて列挙するのが大変になっ てきます.そこでシェルには,あるパターンのファイル名をまとめて指定する 仕組みが用意されています.「*」,「?」,「[」,「]」,「{」,「}」,「~」 などは,複数の文字や文字列を代表するための特別な文字です.このような文字を メタキャラクタ(meta character)と言います.

メタキャラクタを含む引数があると,シェルは以下の規則に従って合致するファイル名を探し,合致したファイル名全部と置き換えます.

「*」や「?」はポーカーでジョーカーが他のどんなカードの代わりにでも使えるのと似ている ので,ワイルドカードと呼ぶ人もいます.

注意注意
メタキャラクタは操作を間違えた場合の影響も大きいので注意する必要があり ます.特にファイルを削除するような場合はコマンドを実行する前に,削除さ れるファイルをよく確認してください.

例えば,カレントディレクトリのすべてのファイルの中から happy という文字列を探したければ,

% grep happy *
      

とします.ファイル名が .txt か .text で終わるファイルだけを探す対象にしたければ,

% grep happy *.{txt,text}
      

とします.

注意注意
「.」で始まるファイル名は特別扱いなので,単に「*」としただけでは合致しません.

● 練習問題

カレントディレクトリを /pub/sfc/ipl/1a/exercise/filename にし,ls コマンドで中にあるファイル名を確認しなさい.

  • ls a* を実行するとどうなるでしょう.
  • ls a? を実行するとどうなるでしょう.
  • ls a?? を実行するとどうなるでしょう.
  • ファイル名が a で始まって e で終わるものだけを表示するにはどうすればよいでしょう.
  • ls [ab]* を実行するとどうなるでしょう.
  • ls [^a]* を実行するとどうなるでしょう.