Bash Shell tar归档中不重复的目录,你想提取归档中的文件,但希望提前知道这些文件会写入哪些目录。可以通过 tar -t 查看 tar 归档文件所包含的内容列表,不过这样可能会产生大量输出,容易造成遗漏。
解决方案
使用 awk 脚本从 tar 归档的内容列表中解析出目录名称,然后用 sort -u 得到不重复的目录名称:
tar tf some.tar | awk -F/ '{print $1}' | sort -u
讨论
t 选项可以为 f 选项指定的 tar 归档文件生成内容列表。awk 命令通过 -F/
将字段分隔符指定为非默认的斜线。因此,print $1
会输出路径名中的第一个目录名。
最后,对所有目录名排序并仅输出不重复的那些目录。
如果某行输出包含单个点号,那么部分文件就会被提取到当前目录,因此要确保位于所需要的目录中。
与此类似,如果归档文件中的文件名全都是相对路径,起始部分没有 ./
,那么会在当前目录下生成一系列文件。
如果输出中出现了空行,这意味着有些文件采用了绝对路径(路径起始部分为 /
)。再次提醒,提取这种归档有可能会误覆盖别的文件。
有些版本的 tar(如 GNU tar)会默认或有选择地剥除路径中的前导 /
。这种方式创建的 tarball 要安全得多,但你可别指望所有的 tar 都会这么做。
酷客网相关文章:
评论前必须登录!
注册