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 {} +