将 find 与 sh 命令一起使用不起作用 - 进一步查询

将 find 与 sh 命令一起使用不起作用 - 进一步查询

继之前发布的查询之后 将 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包含该内容的所有文件,然后调用第一个在其中找到匹配项的文件。如果第二个文件也找到了某些内容,则该文件生效。FWgrep -Fiq archivegrepgrep-ls

相关内容