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

이 명령이 필요한 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

관련 정보