繼之前發布的查詢之後 將 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