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

使用awk。这个答案解释得很好: 仅 tar 列出文件

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

请注意,这假设您的实现在路径包含换行符时tar打印文字。 \nGNUtar做到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

相关内容