.svg
내 find 명령에서 및 파일을 제외하려고 시도하고 있지만 .jpg
여전히 두 파일이 모두 반환됩니다. 내가 도대체 뭘 잘못하고있는 겁니까?
find . \( ! -iname \*\.svg -o ! -iname \*\.jpg \)
답변1
귀하의 논리에는 결함이 있습니다. 지금 가지고 있는 명령을 사용하면 파일이 아닌 모든 .svg
파일 을 찾을 수 있습니다 .jpg
. 당신이 쓴 내용은 다음과 같습니다.
찾기(SVG가 아닌 모든 것또는JPG가 아닌 모든 것)
find
따라서 이미 첫 번째 부분을 평가하고 SVG 파일이 아닌 모든 것을 제공했기 때문에 JPG 파일을 얻게 됩니다 . 옵션이 구문 분석되는 방식으로 인해 표현식의 첫 번째 부분이 or
true로 평가되면 두 번째 부분은 살펴보지도 않습니다.
본질적으로 find
SVG가 아닌 모든 것을 반환하면 JPG 파일에서 원하는 것이 무엇인지는 신경 쓰지 않습니다.
이것을 표현하는 올바른 방법은 논리적입니다 and
.
find . \( ! -iname '*.svg' -a ! -iname '*.jpg' \)
이는 다음과 같습니다:
찾기(SVG가 아닌 모든 것그리고JPG가 아닌 모든 것)
또는 전체 표현을 부정함으로써:
find . ! \(-iname '*.svg' -o -iname '*.jpg' \)
다음과 같이 읽습니다.
SVG가 아닌 모든 것을 찾아보세요또는JPG)
*
예를 들어 작은따옴표나 큰따옴표로 묶으면 이스케이프를 건너뛸 수 있습니다 -iname '*.jpg'
. 이것은 읽기가 훨씬 쉽습니다.