linux – 如何在tar存档中的文件中grep for pattern而不填满磁盘空间

linux – 如何在tar存档中的文件中grep for pattern而不填满磁盘空间,第1张

概述我有一个tar存档,非常大~5GB. 我想在存档中grep查看所有文件上的模式(并且还打印具有该模式的文件的名称),但不想通过提取存档来填满我的磁盘空间. 无论如何我能做到吗? 我尝试了这些,但这并没有给我包含模式的文件名,只是匹配的行: tar -O -xf test.tar.gz | grep 'this'tar -xf test.tar.gz --to-command='grep awes 我有一个tar存档,非常大~5GB.

我想在存档中grep查看所有文件上的模式(并且还打印具有该模式的文件的名称),但不想通过提取存档来填满我的磁盘空间.

无论如何我能做到吗?

我尝试了这些,但这并没有给我包含模式的文件名,只是匹配的行:

tar -O -xf test.tar.gz | grep 'this'tar -xf test.tar.gz --to-command='grep awesome'

此外,tar的这个特性记录在哪里? tar xf test.tar $file

解决方法 这是我对此的看法:
while read filename; do tar -xOf file.tar "$filename" | grep 'pattern' | sed "s|^|$filename:|"; done < <(tar -tf file.tar | grep -v '/$')

分解为:

>读取文件名;做 – 这是一个循环……
> tar -xOf file.tar“$filename” – 这会提取每个文件……
> | grep’pattern’ – 这里是你放置模式的地方……
> | sed“s | ^ | $filename:|”; – 前置文件名,所以这看起来像grep.盐味.
>完成< <(tar -tf file.tar | grep -v'/ $') - 结束循环,获取文件列表,以便在阅读时对你有所帮助.
一个附带条件:如果您的文件名中有OR条(|),则会中断.

嗯.实际上,这是一个很好的小bash函数,你可以将它附加到你的.bashrc文件:

targrep() {  local Taropt=""  if [[ ! -f "" ]]; then    echo "Usage: targrep pattern file ..."  fi  while [[ -n "" ]]; do        if [[ ! -f "" ]]; then      echo "targrep: : No such file" >&2    fi    case "" in      *.tar.gz) Taropt="-z" ;;      *) Taropt="" ;;    esac    while read filename; do      tar $Taropt -xOf "" \       | grep "" \       | sed "s|^|$filename:|";    done < <(tar $Taropt -tf  | grep -v '/$')  shift  done}
总结

以上是内存溢出为你收集整理的linux – 如何在tar存档中的文件中grep for pattern而不填满磁盘空间全部内容,希望文章能够帮你解决linux – 如何在tar存档中的文件中grep for pattern而不填满磁盘空间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存