回答:
マニュアルページからそれを行う方法はわかりませんが、結果をいつでもフィルタリングできます。以下は、ファイル名に改行がないことを前提としています。
tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'
使い方
フィールド区切り文字をに設定する/
と、最後のフィールドはawk
($NF
)がファイル名を処理している場合はファイル名、ディレクトリ名を処理している場合は空です(ディレクトリ名にtar
末尾のスラッシュが追加されます)。したがって、基本的にawk
は、最後のフィールドが空でない場合は印刷するように指示しています。
Joseph R.の提案を利用して、末尾がでない行を探すことでファイルに正規表現[^/]$
を使用できます。grep
/
tar tzf archive.tar.gz | grep -e "[^/]$"
foo/bar
は、単にに対してではなく、まだ出力されbar
ます。必要なgrep -Eo '[^/]+$'
(GNU grepを使用)。
ファイル名に改行が含まれていないと仮定します。
tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'
最初のsedコマンドは/
、行の最後の前のすべてを削除するため、ファイル名の部分のみが出力されます。2番目のコマンドは、現在空になっている行、つまりa /
で終わる行(ディレクトリ)を削除します。
pax
(読み取りにPOSIXコマンドtar
ファイル):
pax -'s@.*/@@' < file.tar
(ディレクトリを含む、タイプに関係なくすべてのファイルをリストします)。
tar xvzf my_tar.tar.gz --transform 's/.*\///'
。しかし残念ながら、それはそれはでリストに表示される方法を変更しないt
のではなくx
。