我有一个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
打印文字。 \n
GNUtar
做到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