检查文件名是否与tar --to-command中的模式匹配

时间:2019-05-28 17:44:03

标签: linux bash shell

我有一个TGZ文件(用GZIP压缩),其中包含各种各样的其他压缩文件,一些二进制文件,一些ascii文本。我想grep通过压缩的ascii文本文件查找字符串匹配项并打印文件名。一些研究使我进入了tar --to-command,当用zgrep执行时,它似乎几乎可以实现我想要的功能,但是,我无法过滤出要搜索的文件名,因此该任务花费的时间过长并且无法打印一路上扔掉一些垃圾。

除了要检查存档中的所有文件之外,这是我想要的:

tar xaPf log.tgz --to-command='zgrep -l "mystring" && echo $TAR_FILENAME || true'

这是我最好的猜测:

tar xaPf log.tgz --to-command='if [[ $TAR_FILENAME *asciiFile.gz ]]; then zgrep 'mystring'; fi'

但是我得到的只是这个:

/bin/sh: 1: [[: not found

对于每个文件。根据我的阅读,--to-command的参数不能在完整的bash shell中运行,因此我可以执行哪些条件语句,以便仅评估给定后缀的文件?谢谢


更新: 意识到--to-command仅执行/bin/sh Shell命令,我修改了命令:

tar xaPf log.tgz --to-command='[ "$TAR_FILENAME" = "*asciiFile.gz" ] && zgrep "mystring" || true'

因此,它现在执行时没有错误,但是条件表达式永远不会为真。如何在/bin/sh中检查模式?

1 个答案:

答案 0 :(得分:0)

这里是:

tar xaPf log.tgz --to-command='echo "$TAR_FILENAME" | grep -q "asciiFile.gz" && zgrep "mystring" || true'