显示tar文件的文件名

时间:2015-04-17 15:05:18

标签: bash

我想知道如何显示文件名以及与tar文件的特定单词匹配的行。

命令明智:

zcat file | grep "stuff" -r # shows what I want
zcat *.gz | grep "stuff" -ar # this fails

5 个答案:

答案 0 :(得分:0)

您可以使用zgrep

对于单个文件,您可以使用以下命令显示文件名:

zgrep "stuff" file.gz /dev/null

对于多个文件:

zgrep "stuff" *.gz 

答案 1 :(得分:0)

我不太确定问题是什么,但如果你在系统上寻找tar文件,那么就做这样的事情。这将以递归方式搜索当前目录和.tar文件的所有子目录。希望这可以帮助。

find -name "*.tar"

答案 2 :(得分:0)

也许这related answer可以提供帮助。它使用tar解压缩(您需要添加-z)并将归档的每个文件管道传输到awk以便在其中“grepping”。

答案 3 :(得分:0)

如果zcat file | grep "stuff" -r显示您想要的内容,则可以针对多个文件执行此操作:

for name in *.gz ; do zcat "$name" | grep -a "stuff" | sed -e "s/^/${name}: /"  ; done

此命令使用globbing(*)扩展到工作目录中的.gz个文件列表,然后调用zcat进行提取,grep进行搜索, sed用于在每个文件上添加文件名前缀。

请注意,如果您使用的是gzipped压缩包,那么大多数人会为其提供.tgz.tar.gz,而不只是.gz扩展。

答案 4 :(得分:0)

这将输出nameOfFileInTar:LineNumber:Match。使用greptar.sh tarfile.tar pattern

进行调用

如果您不想要行号,请删除-n选项。如果您只想要行号,请在|cut -f1 -d:

之后添加grep
#!/bin/bash

TARFILE=$1
PATTERN=$2
tar ztf $TARFILE | while read -r FILE
do
  res=$(tar zxf $TARFILE $FILE  -O | grep -n $2 )
    if [[ $? == 0 ]]; then
      echo "$res" | while read -r line; do
        echo $FILE:$line;
      done
    fi
done