2.7 アーカイブの一覧表示

あるアーカイブに何が入っているかを正確に知りたいことは、よくあります。--list(-t)操作を使うと、現在のアーカイブ内でのメンバー名と、アーカイブした時点のファイルの各種属性を取得できます。たとえば、practiceが作業ディレクトリであれば、前の節で作成したアーカイブcollection.tarを、次のコマンドで調べられます。

$ tar --list --file=collection.tar

tarの出力は次のようになります。

blues
folk
jazz

--create(-c)の場合と同じく、--file=archive-name(-f archive-name)でアーカイブ名を必ず指定してください。

「list」では、1つ以上のメンバー名を個別に引数として指定できます。この場合、tarは指定したメンバー名だけを一覧表示します。たとえば、tar --list --file=collection.tar folkは、folkだけを表示します。

$ tar --list --file=collection.tar folk
folk

--listとともに--verbose(-v)を使うと、tarは「ls -l」に似た一覧を表示し、所有者、ファイルサイズなどを示します。この出力について詳しくは、詳細なメンバー一覧で説明しています。

--verbose(-v)モードを使うと、上の例は次のようになります。

$ tar --list --verbose --file=collection.tar folk
-rw-r--r-- myself/user      62 1990-05-23 10:55 folk

tar --list --verboseの出力が、アーカイブ作成時のtar --create --verboseの出力と必ずしも一致しないことに注意してください。GNU tarは、明示的に禁止されなければ、格納前にファイル名から一部のディレクトリ接頭辞を取り除くためです(詳しくは絶対ファイル名を参照)。つまり、詳細表示モードのGNU tarは、作成時にはファイル名を、一覧表示時にはメンバー名を表示します。ホームディレクトリから実行する次の例を見てください。

$ tar --create --verbose --file practice.tar ~/practice
tar: Removing leading '/' from member names
/home/myself/practice/
/home/myself/practice/blues
/home/myself/practice/folk
/home/myself/practice/jazz
/home/myself/practice/collection.tar
$ tar --list --file practice.tar
home/myself/practice/
home/myself/practice/blues
home/myself/practice/folk
home/myself/practice/jazz
home/myself/practice/collection.tar

この既定の動作が不便なこともあります。--show-stored-namesを指定すると、GNU tarに、アーカイブ作成時にもメンバー名を表示させられます。

--show-stored-names

アーカイブ作成時に、ファイル名ではなくメンバー名を表示します。

このオプションを使うと、どちらのコマンドも同じ出力になります。

$ tar --create --verbose --show-stored-names \
           --file practice.tar ~/practice
tar: Removing leading '/' from member names
home/myself/practice/
home/myself/practice/blues
home/myself/practice/folk
home/myself/practice/jazz
home/myself/practice/collection.tar
$ tar --list --file practice.tar
home/myself/practice/
home/myself/practice/blues
home/myself/practice/folk
home/myself/practice/jazz
home/myself/practice/collection.tar

tarはファイル名を保持するため、一覧表示したい名前は、アーカイブ内に現れるとおりに指定する必要があります(つまり、アーカイブを作成したディレクトリからの相対名です)。上の例を続けると、

$ tar --list --file=practice.tar folk
tar: folk: Not found in archive
tar: Exiting with failure status due to previous errors

folkというメンバーはなく、home/myself/folkというメンバーだけがあるため、エラーメッセージが出ます。

正確なファイル名が分からない場合は、グロブパターンを使ってください。たとえば次のようにします。

$ tar --list --file=practice.tar --wildcards '*/folk'
home/myself/practice/folk

グロブパターンと関連するtarのコマンドラインオプションについて詳しくは、ワイルドカードパターンと照合を参照してください。