Bash Shell tar归档中不重复的目录

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 都会这么做。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!