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
これは、パスに改行が含まれている場合、実装がリテラルを印刷すると仮定します。\n
GNUはこれ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