괄호

괄호

내가 입력한 일부 find 명령은 많은 파일을 무시하고 *명령 끝에 작업을 전달하지 않는 경우에만 작동하는 것 같습니다.

이 질문의 기초로 다음 명령을 사용하겠습니다.
find . -depth -name '*.elf' -or -name '*.exe'

실제 예:
find . -depth -name '*.elf' -or -name '*.exe' -or -name 'f*.xml' -or -name '*.html' -or -name '*.jar' -or -name '*.mat' -or -name '*.pyc' -or -name '*_dll' -or -name '*.class' -or -name '*.DS_Store' -or -name '*.dll' -or -name '*.dex'

기본 명령 자체는 많은 출력을 제공하지만 다음 명령은 아무 작업도 수행하지 않습니다*:
find . -depth -name '*.elf' -or -name '*.exe' -delete

다시 말하지만, 이 명령은 기본 명령과 동일해야 하지만 출력을 제공하지 않습니다*:
find . -depth -name '*.elf' -or -name '*.exe' -print

심지어*:
find . -depth -name '*.elf' -or -name '*.exe' -exec echo {} \;

find 작동 방식에 대해 뭔가 빠졌나요?

저는 GNU find 버전 4.8.0을 사용하고 있습니다.

*"잘 작동한다"는 것은 내가 찾은 기본 명령을 실행한다는 의미입니다.모두파일을 일치시키지만 명시적으로 조작하면 일관된 일부 하위 집합만 발견됩니다. 즉, 를 전달하면 -delete하위 집합이 사라지고 명시적인 작업으로 남은 파일을 찾을 수 없습니다. 기본 명령으로 되돌리면 다시 찾을 수 있습니다.

답변1

괄호

분명히 작업은 OR 표현식의 일부가 되며 분기 중 하나에서만 작동하는 동시에 모든 분기의 암시적 인쇄를 제거합니다. (원천)

그런 다음 해결책은 또는 분기를 포함하고 작업이 하나의 분기에만 적용되지 않도록 하는 다음과 같은 표현식을 작성하는 것입니다.
find . -depth \( -name '*.elf' -or -name '*.exe' -or -name 'f*.xml' -or -name '*.html' -or -name '*.jar' -or -name '*.mat' -or -name '*.pyc' -or -name '*_dll' -or -name '*.class' -or -name '*.DS_Store' -or -name '*.dll' -or -name '*.dex' \)

또는 축약된 형태:
find . -depth \( -name '*.elf' -or -name '*.exe' \)

질문 작성을 마치기 전에 답변을 찾는 데 적합한 검색어를 찾을 수 없었기 때문에 이 질문과 답변을 계속 게시하고 있습니다. 이 새로운 질문이 누군가에게 도움이 되기를 바랍니다.

관련 정보