linux – 如何在tar存档中的文件中grep for pattern而不填满磁盘
发布时间:2020-12-13 19:25:25 所属栏目:Linux 来源:网络整理
导读:我有一个tar存档,非常大~5GB. 我想在存档中grep查看所有文件上的模式(并且还打印具有该模式的文件的名称),但不想通过提取存档来填满我的磁盘空间. 无论如何我能做到吗? 我尝试了这些,但这并没有给我包含模式的文件名,只是匹配的行: tar -O -xf test.tar.gz
我有一个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 '/$') 分解为: >读取文件名;做 – 这是一个循环…… 嗯.实际上,这是一个很好的小bash函数,你可以将它附加到你的.bashrc文件: targrep() { local taropt="" if [[ ! -f "$2" ]]; then echo "Usage: targrep pattern file ..." fi while [[ -n "$2" ]]; do if [[ ! -f "$2" ]]; then echo "targrep: $2: No such file" >&2 fi case "$2" in *.tar.gz) taropt="-z" ;; *) taropt="" ;; esac while read filename; do tar $taropt -xOf "$2" | grep "$1" | sed "s|^|$filename:|"; done < <(tar $taropt -tf $2 | grep -v '/$') shift done } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |