/hoge/huga
内のfile
で始まるファイルをアーカイブ化し/hoge/output.tar
に出力する~といった場合に、
以下のようなコマンドを使ったところ困ったことになったのでめも
# これは誤りのコマンドなのでこの様式で実行するとひどいことになる。こうかいしませんね?
$ tar cvf /hoge/huga/file* /hoge/output.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