コンピュータリテラシー演習目次

UNIXのワイルドカード

ファイル名の展開--More About Unixシェル

シェルにはワイルドカードと呼ぶ,ファイル名を補完する機能がある. ワイルドカードを使ってパターンを指定し,長いファイル名を短いタイプでマッチさせたり,複数のファイル群にマッチさせたりすることができる. これをシェルのファイル名展開またはファイル名置換という.
一般に,こうした文字列のパターンマッチ指定のための表現を正規表現と呼ぶ. 正規表現の習得は,コンピュータ利用の基本中の基本で,効率的情報処理には欠かせない.
UNIXでは,ファイル名として事実上いくらでも長い名前を付けることができる. ファイルには,ファイルの性質を表わす拡張子を含めて,ファイルとファイル内容ができるだけ対応しているように適切なファイル名をつける必要がある. この考えを徹底するとファイル名が長くなってキーボード入力がわずらわしくなったり,同様なファイル名を持つ関連するファイル群を一括指定したい場合も起ってくる. このようなとき,シェルのファイル名展開機能を使って,ファイル名を楽に指定したり,同じようなファイル名を持つファイル群を取り出すのである.

ファイルを指定するときに使えるワールドカードには次がある.

ファイル名展開に使えるワイルドカード
ワイルドカード 意      味
* 任意の文字列(文字がなくてもよい)
? 任意の1文字
[文字列] [ ]に含まれている文字の中のどれか1文字.
[!文字列] [ ]に含まれない1文字.
~ ユーザーのホームディレクトリの絶対パス

次にワイルドカードを利用したファイルパターンの指定例をあげる.

Unixではテキストファイルはもちろんディレクトリやコマンドやデバイスなども全てファイルとして扱われる.
ファイルパターンの例
* すべてのファイル
*.txt 拡張子が .txt であるファイルすべて
*abc* ファイル名の中にabcという文字列を含むファイルすべて
[a-n]* aからnまでのどれかの文字で始まるファイルすべて
[-p-z]* ハイフン(-)かpからzまでのどれかの文字で始まるファイルすべて
[a-zA-Z]* アルファベットの小文字または大文字のどれがの文字で始まるファイルすべて
*[0-9]* ファイル名に数字が含まれているファイルすべて
[!0-9]* 数字では始まらないファイルすべて
??? 3文字からなるファイルすべて
???* ファイル名が3文字以上のファイルすべて
*.??? 拡張子が3文字のファイルすべて
*.t* 拡張子がtで始まるファイルすべて
~/* ホームディレクトリにあるファイルすべて
~/public_html/* ディレクトリpublic_htmlにあるファイルすべて
~/doc/*.tex ディレクトリdocにある拡張子が .texであるファイルすべて
/tmp/* ディレクトリ/tmpにあるすべてのファイル
~/public_html/image/*.gif ディレクトリpublic_html/imageにあるGIFファイルすべて

上の例で,アルファベットの小文字a-zと大文字A-Zの中の1文字を表わす『[a-zA-Z]』という書き方を『[a-Z]』と書いてはならない(文字コードの大小で判定しているために[a-Z]では何も含まれていないため). また,『A-z』とすると文字コードでZとaの間に含まれてしまう文字も入ってしまう.

ファイル名展開の利用

ファイル名展開を利用するためには,コマンドに渡すファイル名に上の表のようなファイルパターンを指定すればよい.

% ls パターン
とすると,指定したファイルパターンにマッチ (match)したファイル群だけが一覧される. たとえば,『ls *~』はバックアップファイルを一覧する.

演習

  1. 各自のホームディレクトリ内で、.txt という拡張子が付いたファイル・ディレクトリの一覧を表示する コマンドは何か?そして、そのコマンドを実行してみよ。
  2. 各自のホームディレクトリ内で、小文字の英字から始まるファイル・ディレクトリの一覧を表示するコマンドは何か? そして、そのコマンドを実行してみよ。

コンピュータリテラシー演習目次

mizutani@rsch.tuis.ac.jp
ohmi@rsch.tuis.ac.jp (加筆修正 2002年5月13日)