![Mac에서 find 명령을 사용하여 /디렉토리를 검색할 때 /System 디렉토리를 제외할 수 없습니다.](https://linux55.com/image/191393/Mac%EC%97%90%EC%84%9C%20find%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%2F%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20%EA%B2%80%EC%83%89%ED%95%A0%20%EB%95%8C%20%2FSystem%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20%EC%A0%9C%EC%99%B8%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
전체 Mac에서 1GB보다 큰 파일을 검색하려고 합니다. 명령 find
이 디렉터리 /System
및 /System/Volumes
.
find -x / -type f -size +1G
시도했지만 아무것도 도움이 되지 prune
않는 것 같습니다.! -path
-not -path
답변1
이 시도:
find -x / -path /System -prune -or -type f -size +1G -print
제 생각에는 부울 논리를 올바르게 만드는 것은 find
프로그램에서 가장 어려운 일 중 하나입니다. 괄호를 사용하지 않으면 논리를 추적하기가 쉽지 않습니다... 그리고 전혀 도움이 되지 않습니다. 괄호로 인해 보기 흉하고 읽기 어려워집니다.
간단히 말해서, find에 대해 기억해야 할 핵심은 모든 술어가 다음과 같다는 것입니다.암시적 AND 연산OR( 또는 ) find
를 사용 하지 않는 한 앞의 술어와 함께 사용됩니다 .-or
-o
AND는 -and
or -a
이지만 AND가 기본값이므로 명시적이고 명확하게 만들고 싶지 않는 한 명시적으로 AND를 사용할 필요가 거의 없습니다. 이렇게 하면 X개월 안에 편집해야 하고 작동 방식을 잊어버릴 때 더 쉽게 이해할 수 있습니다. 예를 들어, 다음은 위의 예와 동일합니다.
find -x / -path /System -and -prune -or -type f -and -size +1G -print
평가 방법은 다음과 같습니다.(-path /System -and -prune) -or (-type f -and -size +1G)
따라서 위의 명령은 -path /System
ANDed된 다음 ORed -prune
되어 /System 디렉터리와 모든 하위 디렉터리(따라서 /System/Volumes를 명시적으로 제외할 필요가 없음)가 검색에서 제외됩니다.-type f
-size +1G
두 개 이상의 디렉터리를 제외해야 하는 경우 bash에서 특수한 의미(예: 복합 명령/하위 쉘)를 숨기려면 이스케이프하거나 인용해야 하는 괄호를 사용하세요. 예를 들어:
find -x / \( -path /System -o -path /somewhere -o -path /else \) -prune -o -type f -size +1G -print
이 예에서는 -prune
디렉터리에 대해(/System OR /somewhere OR /else)
이것이 뭔가를 명확하게 해주기를 바랍니다. 저는 지금 약간 잠이 부족해서 잘 설명했는지 잘 모르겠습니다.
그건 그렇고, -x
FreeBSD의 찾기 옵션은 훌륭한 향상 기능입니다. 부울 논리는 표준 술어를 사용하면 -xdev
더욱 복잡해집니다 . (불행히도 GNU find는 그렇지 않습니다 -x
. 그러나 FreeBSD를 사용하여 Mac에서 실행하고 있기 때문에 그것은 당신과 관련이 없습니다 find
)