OSX(big sur -so Zhell)에는 .bundle 파일이 포함된 폴더가 있고 각 번들에는 여러 파일과 폴더가 포함되어 있습니다. 대부분의 파일에는 PNG_.zip이라는 리소스가 있지만 일부 파일에는 없습니다.
그래서 이것을 실행하면:
find ~/Desktop/test -name "PNG_.zip"
PNG_.zip이 포함된 모든 항목이 출력됩니다.
하지만 모든 항목을 찾고 싶습니다.PNG_.zip을 포함하지 않음어떻게 해야 하나요?
감사해요!
답변1
zsh 사용글로벌 예선, 번들이 디렉토리라고 가정합니다.
먼저, 현재 디렉터리 아래에서 패키지 디렉터리를 찾는 방법은 다음과 같습니다.
print -rC1 -- **/*.bundle(/N)
**/…
중첩된 하위 디렉터리의 파일과 일치합니다.(/)
디렉터리에 대한 일치를 제한합니다.(N)
일치하는 항목이 없으면 결과는 오류 대신 빈 목록입니다.
그런 다음 결과를 필터링하여 번들만 유지하고 다른 항목은 유지하지 않습니다 PNG_.zip
.
print -rC1 -- **/*.bundle(/Ne['()(($#==0)) $REPLY/**/PNG_.zip(NDY1)'])
(e['…'])
일치 항목 필터링: 식이 참인 일치 항목만 유지합니다. 이 코드는 각 게임마다 순차적으로 실행되며$REPLY
게임에 설정됩니다.()(($#==0)) …
…
길이가 0인 단어 목록으로 확장되는지, 즉…
(단어 목록으로서) 비어 있는지 여부를 테스트합니다 .(Y1)
일치하는 항목이 하나 발견되면 디렉터리 탐색을 중지하는 최적화입니다. ()는 또한(D)
패키지 디렉토리의 숨겨진 하위 디렉토리에 있는dotglob
파일을 찾습니다 .PNG_.zip
답변2
나는 믿는다:
$ find . -type f \( ! -iname "*PNG_.zip*" \)
실제로 트릭이 있습니다. ! 연산자는 검색 패턴을 부정합니다. 따라서 일치하지 않는 모든 파일을 얻게 됩니다.