非再帰的tarリスト

非再帰的tarリスト

私は大量のファイルを含むディレクトリを含むtarアーカイブを持っています。
私は以下を実行しました:

tar -tf filename.tar.gz

ディレクトリが必要な場合、実行は再帰的に出力されます。
このディレクトリをどのように「フィルタリング」できますか?

答え1

アーカイブの最上位レベルですべての名前を取得するには、次のようにしますtar

tar -tf archive.tar | cut -d '/' -f 1 | sort -u

これにより、アーカイブの内容が一覧表示され、/各行の前の最初のビットが削除されます。結果を並べ替え、重複項目を削除します。アーカイブに最上位ディレクトリ(ファイルとサブディレクトリを含めることができます)が1つしか含まれていない場合、結果はそのディレクトリの名前になります。

最上位名に改行が含まれている場合、結果は使用されている実装tarによって異なります(GNUでエンコードされた改行を含む文字列を取得します\ntarGNUはtarタブと名前の他の文字もエンコードします))。そしてBSDから2つの別々の文字列を取得しますtar。 。

例:

$ tar -tf archive.tar
README.txt
source
source/program.c
$ tar -tf archive.tar | cut -d '/' -f 1 | sort -u
README.txt
source

同様に、アーカイブの最上位レベルにディレクトリが1つしか含まれていない場合は、その名前が返されます。

答え2

たとえばgnuchess-6.2.5.tar.gz、ルートディレクトリ名のみを取得するには、次の手順を実行します。

[David@Fedora64 projects]$ tar -tf gnuchess-6.2.5.tar.gz | grep -e "\/$" | head -n1
gnuchess-6.2.5/
[David@Fedora64 projects]$ 

同様の構造のファイルなど、これが何もしない場合は、mediawiki-1.33.0.tar.gzファイルの最初の行を見て、ルートディレクトリ名を取得できますtar

[David@Fedora64 Downloads]$ tar -tf mediawiki-1.33.0.tar.gz | head -n1
mediawiki-1.33.0/.phan/config.php
[David@Fedora64 Downloads]$ 

...ルートディレクトリはmediawiki-1.33.0

答え3

$ tar -tf mytar.tar | tree -L 1 --fromfile # show top level

関連情報