![非再帰的tarリスト](https://linux33.com/image/159204/%E9%9D%9E%E5%86%8D%E5%B8%B0%E7%9A%84tar%E3%83%AA%E3%82%B9%E3%83%88.png)
私は大量のファイルを含むディレクトリを含むtarアーカイブを持っています。
私は以下を実行しました:
tar -tf filename.tar.gz
ディレクトリが必要な場合、実行は再帰的に出力されます。
このディレクトリをどのように「フィルタリング」できますか?
答え1
アーカイブの最上位レベルですべての名前を取得するには、次のようにしますtar
。
tar -tf archive.tar | cut -d '/' -f 1 | sort -u
これにより、アーカイブの内容が一覧表示され、/
各行の前の最初のビットが削除されます。結果を並べ替え、重複項目を削除します。アーカイブに最上位ディレクトリ(ファイルとサブディレクトリを含めることができます)が1つしか含まれていない場合、結果はそのディレクトリの名前になります。
最上位名に改行が含まれている場合、結果は使用されている実装tar
によって異なります(GNUでエンコードされた改行を含む文字列を取得します\n
(tar
GNUは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