/hoge/huga内のfileで始まるファイルをアーカイブ化し/hoge/output.tarに出力する~といった場合に、

以下のようなコマンドを使ったところ困ったことになったのでめも

# これは誤りのコマンドなのでこの様式で実行するとひどいことになる。こうかいしませんね?
$ tar cvf /hoge/huga/file* /hoge/output.tar


tarコマンドのつかいかた

tarコマンドでアーカイブを作成する際には大体以下の様式でコマンドを実行する。

$ tar cvf <出力ファイル名> <アーカイブ対象ファイル ...>

で、例示のように「このディレクトリ配下全部アーカイブしたいなぁ...」と思って以下のように組み立てたとする。

$ tar cvf /hoge/output.tar /hoge/huga/file*

...まぁ/hoge/output.tarに理想通り出来上がる。

シェルコマンドでの「*(ワイルドカード)」

ところで、シェルコマンドにおける「*(ワイルドカード)」の扱いを振り返ってみよう。

$ ls /hoge/huga/
data1.txt data2.txt file1.txt file2.txt file3.txt

ファイルがこのようになっていた場合に以下のコマンドを入れてみる。

$ ls /hoge/huga/file*
file1.txt file2.txt file3.txt

なぜこのようになるか。

シェルはワイルドカードを含むパスを自動的に展開する。 例えば、/hoge/huga/file*は、/hoge/hugaディレクトリ内のfileで始まるすべてのファイルパスを列挙する。

つまり以下のように入力されたものとして解釈する。

$ ls /hoge/huga/file1.txt /hoge/huga/file2.txt /hoge/huga/file3.txt