我有一个 7z 文件,其中包含二进制数据以及大型 (>1Mb) 和小型 (<1Mb) XML 文件。
我只想查找包含特定字符串的小 XML 文件。我尝试过使用 zgrep,但它似乎会在所有文件中搜索。
编辑:我最终做的是编写 .7z 内所有 xml 文件的列表,仅 grep 具有 6 位数字的行,仅复制文件名并提取它们。有更有效的方法吗?
7z l test.7z *.xml > tmplist1
num="6"
grep -E "\s[0-9]{$num}\s" tmplist1 | grep -oE '[^[:space:]]+$' | sed "s/^/*/" > tmplist2
7z e -o/tmp test.7z -i@tmplist2 -aos
grep -E "*string*" /tmp/*.xml > tmplist3
答案1
关于什么
find . -iname "*.7z" -o -iname "*.xml" -size -1M -exec grep -options {} \;
?在当前工作目录中find
查找块设备、特殊的无缓冲字符条目、目录、文件、符号链接、命名 FIFO 管道、套接字等
.
(如果是给定的唯一路径,则不需要),
-iname "*.xml"
并.xml
在名称末尾(不区分大小写)
-o
或(逻辑上)在名称末尾
-iname "*.7z"
加上.7z
或 ,大小小于 1 MB ,并在所有找到的文件上执行,并用您自己的选项替换.终于结束这部分了。.7Z
-size -1M
-exec grep -options {}
grep
-options
\;
-exec