
전체 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
)