이전에 게시된 쿼리에 이어 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
이름에 해당 내용이 포함된 모든 파일을 호출한 다음 일치하는 항목이 발견된 첫 번째 파일을 호출합니다 . 두 번째 파일에서도 무언가를 찾으면 해당 파일이 적용됩니다.FW
grep -Fiq archive
grep
grep
-ls