继之前发布的查询之后 将 find 与 sh - 命令一起使用不起作用
find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls
当在多行中找到“archive”或“chmod”文本时,此 cmd 无法找到文件。但是,当在同一行中找到“chmod”和“archive”文本时,它可以扫描文件。
所以尝试使用这个命令,但它没有给出所需的o/p
1> find . -type f -name '*FW*' -exec grep -iEq 'chmod.*' {} \; -ls -exec grep -iEq '.*archive.*' {} +
为什么这个命令没有给出所需的o/p?
尝试使用此命令,它给出了预期的结果,但它间歇性地失败,并出现此错误“find:'pcregrep'被信号11终止”
2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls
为什么它会失败并出现错误?
答案1
问题中的第二个命令没有给您正确的输出,因为您使用的测试的顺序find
很重要。该命令只会输出包含该chmod
字符串的文件的结果,因为其他grep
命令已运行后 -ls
(并且不产生输出)。
您想要查找同时包含字符串chmod
和 的文件archive
。
find . -type f -name '*FW*' \
-exec grep -Fiq chmod {} \; \
-exec grep -Fiq archive {} \; -ls
这会调用名称中grep -Fiq chmod
包含该内容的所有文件,然后调用第一个在其中找到匹配项的文件。如果第二个文件也找到了某些内容,则该文件生效。FW
grep -Fiq archive
grep
grep
-ls