获取tar存档中特定文件的内容

时间:2012-10-24 00:31:44

标签: linux bash shell tar

此脚本列出包含模式的文件名(在tar存档中)。

tar tf myarchive.tar | while read -r FILE
do
    if tar xf test.tar $FILE  -O | grep "pattern" ;then
        echo "found pattern in : $FILE"
    fi
done

我的问题是:

此功能记录在哪里,其中$ FILE是存档中的一个文件:

tar xf test.tar $FILE

1 个答案:

答案 0 :(得分:2)

这通常记录在手册页中,尝试运行此命令:

man tar

不幸的是,Linux并没有最好的手册页。这个操作系统有一个tar联机帮助页的在线副本:http://linux.die.net/man/1/tar,这很糟糕。但它链接到info man命令,这是命令访问GNU世界中广泛使用的“info”系统(linux用户空间中的许多程序来自GNU项目,例如gcc)。有关于提取特定文件的在线info tar部分的确切链接:http://www.gnu.org/software/tar/manual/html_node/extracting-files.html#SEC27

我也可以推荐来自BSD(例如FreeBSD)或opengroup.org的文档。实用程序的细节可能不同,但一般情况相同。

例如,有一些相当古老但善于来自opengroup的人(XCU表示 Single UNIX Specification ,Version 2,1997的'Commands and Utilities'): http://pubs.opengroup.org/onlinepubs/7908799/xcu/tar.html

  

tar key [file ...]

     

支持以下操作数:

     

密钥 -   键操作数由一个函数字母组成,后面紧跟零个或多个修改字母。功能字母是以下之一:

     

x -   从存档中提取指定的文件。如果命名文件与其内容已写入存档的目录匹配,则(递归)提取此目录。如果存档中的命名文件不存在于系统中,则使用与存档中的文件相同的模式创建文件,但除非用户设置了set-user-ID和set-group-ID模式。有适当的特权。如果文件存在,则除了如上所述之外,它们的模式不会改变。将恢复所有者,组和修改时间(如果可能)。如果未给出文件操作数,则提取存档的全部内容。请注意,如果存档中有多个具有相同名称的文件,则最后一个文件将覆盖所有早期文件。

要完全理解命令tar xf test.tar $FILE,您还应该阅读f选项:

  

f -   使用第一个文件操作数(或第二个,如果已经指定了b)作为存档的名称而不是系统相关的默认值。

因此,命令中的test.tar将被f密钥用作存档名称;然后x将使用第二个参数($FILE)作为要从存档中提取的文件或目录的名称。