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

标签 linux bash shell

我有一个 TGZ 文件(用 GZIP 压缩),其中包含各种其他压缩文件,一些是二进制文件,一些是 ASCII 文本。我想对压缩的 ascii 文本文件进行 grep 查找字符串匹配并打印文件名。一些研究让我想到了 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 中的模式?

最佳答案

这里是:

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

关于linux - 检查文件名是否与 tar --to-command 中的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56347543/

相关文章:

linux - 是否应始终保存 r0-r12 以防止出现 IRQ 或保存较少的寄存器

python - 在Python中,应该如何测试环境变量中指定的路径中是否存在文件?

linux - 字符串定界符正在影响其单个字符的某些实例

linux - 查找和替换多个文件中的文本

bash - 什么是 Bash 文件扩展名?

linux - Docker 中的核心文件是什么?我可以删除它吗?

linux - 负责虚拟内存的内核代码

linux - 在 Bash 中将进程限制为 0.5 秒

linux - Bash 调用两个 bash 脚本

linux - grep 搜索模式中间的上限