【问题标题】:Search a directory of tarballs for a file?在压缩包目录中搜索文件?
【发布时间】:2012-08-03 20:30:56
【问题描述】:

所以我有一个 tarball 目录。即/home/username/dir_w_tarballs。在其中一个 tarball 中,有一位曾在这里工作的工程师提供的许可证密钥。如何在目录中的每个 tarball 中搜索特定文件?类似于find . -name some_file 的东西?我知道我可以使用 tar -jtvf file.tar.bz2 搜索单个 tarball。我希望范围更广一些。

【问题讨论】:

    标签: linux command find


    【解决方案1】:

    您可以使用 tar 和 grep 命令以及 bash for 循环来搜索特定文件或模式。只需更改:

    for i in *.tar.gz; 
    do echo $i; 
    tar tf $i| grep <pattern>; 
    echo '------------'; 
    done
    

    它遍历文件夹中的每个文件,只提取树内容并通过它们 grep。

    如果要递归搜索:

    find . -type f -name "*.tar.gz" | while read f; do echo $f; tar tf $f| grep db_dump ;done
    

    【讨论】:

      【解决方案2】:

      这个怎么样:

      find -name '*.tar' -o -name '*.tar.*' | while read f; do
          tar -tf "$f" | grep some_file | sed "s|^|$f:|"
      done
      

      它将递归查找当前目录下的所有 tarball,列出每一个,使用 grep 搜索特定文件,然后 sed 将 tarball 名称添加到每个匹配项中,这样您就可以告诉哪个 tarball 包含每个匹配项...

      【讨论】:

      • 感谢您的快速回复!似乎对我不起作用。我将其全部输入为一行命令,就像这样
      • @Houdini:这也假设一个相当新的tar 版本可以在没有明确-z/-j 选项的情况下解压缩tarball...
      • 抱歉,我的上一篇文章搞砸了。我不知道如何在响应窗口中使用突出显示代码,但基本上我将其输入为一行(现在带有额外的分号): find -name '.tar' -o -name '.tar.*' |读 f;执行 tar -tf "$f" | grep libncui.so | sed "s|^|$f:|" ;完成
      • tar-1.26 应该没问题。你用的是哪个外壳?这个 sn-p 是为bash...
      • 我正在使用 bash。我理解你想要做的事情的逻辑,但我不是一个足够强大的 Linux 用户来判断我是否做错了什么。明天我会向一位高级工程师询问你的建议。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多