tarはディレクトリなしでフルファイル名を一覧表示します。

tarはディレクトリなしでフルファイル名を一覧表示します。

tgz次のようなファイル構造のファイルがあります

- folder
    - subdir1
      - file1.txt
      - file2.text
    - subdir2
      - file1.txt

実行するとtar -tf folder.tgz以下が出力されます。

folder/
folder/subdir1/
folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/
folder/subdir2/file1.txt

出力リストが次のようにディレクトリ名を除外するにはどうすればよいですか?

folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/file1.txt

答え1

使用star(schily-toolsから):

star tzf file.tgz -find ! -type d

答え2

使用アッ。この答えはこれを非常によく説明します。 tarはファイルのみをリストします。

tar tzf your_archive | awk -F/ '$NF !=""'

tarこれは、パスに改行が含まれている場合、実装がリテラルを印刷すると仮定します。\nGNUはこれtarを行いますbsdtarが、Busyboxtarや他のものはおそらくそうではありません。

答え3

GNU tarを使用していてtarファイルがそれほど大きくない場合は、次のようになります。--to-commandオプション各ファイルに対してコマンドを実行します。

% tar c folder | tar x --to-command 'printf "%s\n" "$TAR_REALNAME"'            
folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/file1.txt

TAR_FILETYPE現在、このオプションは通常のファイルのみをコマンドとして送信しますが、tarに設定された変数を使用して将来サポートされるディレクトリを防ぐことは難しくありません。

% tar c folder | tar x --to-command '[ "$TAR_FILETYPE" != d ] && printf "%s\n" "$TAR_REALNAME"'
folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/file1.txt

関連情報