유사한 find 명령을 통해 "@eadir" 디렉토리를 일관되지 않게 읽습니다.

유사한 find 명령을 통해 "@eadir" 디렉토리를 일관되지 않게 읽습니다.

A) 그러면 모든 *.JPG합계 *.flac파일이 재귀적으로 출력됩니다.

$ find . -type f -name "*.JPG" -o -name "*.flac"

Output includes: 1 JPG document and 254 flac documents

B) 이렇게 하면 *.flac파일이 재귀적으로만 출력됩니다.

$ find . -type f -name "*.flac"

Output includes: 218 flac documents

*.flac두 명령으로 나열된 모든 파일은 각 명령과 정확히 동일한 수의 파일과 일치한다고 가정합니다 . 유일한 차이점은 첫 번째 명령이 *.JPG모든 *.flac 파일 위에 포함된다는 것입니다 . 그렇죠? 완전한 것은 아니고. iTunes 사용자라면 아마도 @eadir카탈로그에 익숙할 것입니다. 놀랍게도 첫 번째 명령에는 *.flac이러한 디렉터리의 파일 @eadir(36개 *.flac파일)도 포함되지만 두 번째 명령에는 포함되지 않습니다.

이 두 명령이 동일한 파일 형식에 대해 서로 다른 결과를 반환하는 이유는 무엇입니까?

답변1

find . -type f -name "*.JPG" -o -name "*.flac"-o다음 조건 중 하나 이상과 일치하는 파일을 찾습니다 ( ).

  • -type f이름 이 .JPG( ) ( ) 로 끝나는 일반 파일 -name "*.JPG";
  • 문서(어떤 유형.flac) 이름이 ( ) 로 끝나는 사람입니다 -name "*.flac".

find . -type f -name "*.JPG" -o -name "*.flac"find . \( -type f -name "*.JPG" \) -o \( -name "*.flac" \)보다 공식적인 용어로 연결("and"를 의미)은 연산자("or" 를 -o의미)보다 더 밀접하게 결합됩니다.

@eadir디렉토리에는 분명히 비정규 파일, 아마도 기호 링크가 포함되어 있습니다. 첫 번째 명령에서는 반환되었지만 두 번째 명령에서는 반환되지 않은 파일 .flac은 일반 파일이 아닙니다. 다음 명령을 사용하여 그들이 무엇을 하고 있는지 확인할 수 있습니다.

find . ! -type f -name "*.flac" -exec ls -ld {} +

관련 정보