將 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

相關內容