sh 명령이 작동하지 않는 상태에서 find 사용 - 추가 쿼리

sh 명령이 작동하지 않는 상태에서 find 사용 - 추가 쿼리

게시된 이전 쿼리에 추가로 sh와 함께 find 사용 - 명령이 작동하지 않음

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.*' {} +

이 cmd가 원하는 o/p를 제공하지 않는 이유는 무엇입니까?

이 명령을 사용하면 예상한 대로 결과가 나오지만 "find: 'pcregrep'가 신호 11에 의해 종료되었습니다.'라는 오류로 인해 간헐적으로 실패합니다.

2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls

오류로 인해 실패하는 이유는 무엇입니까?

답변1

질문의 두 번째 명령은 사용하는 테스트의 순서가 find중요하기 때문에 올바른 출력을 제공하지 않습니다. chmod다른 grep명령이 실행되므로 이 명령은 문자열을 포함하는 파일에 대한 결과만 출력합니다.~ 후에 -ls(그리고 출력을 생성하지 않습니다).

문자열 chmodarchive.

find . -type f -name '*FW*' \
    -exec grep -Fiq chmod {} \; \
    -exec grep -Fiq archive {} \; -ls

이는 이름에 grep -Fiq chmod있는 모든 파일을 호출한 다음 첫 번째 파일에서 일치하는 항목을 호출합니다. 두 번째 파일 도 무언가를 찾은 경우 해당 파일이 적용됩니다.FWgrep -Fiq archivegrepgrep-ls

관련 정보