Mac에서 find 명령을 사용하여 /디렉토리를 검색할 때 /System 디렉토리를 제외할 수 없습니다.

Mac에서 find 명령을 사용하여 /디렉토리를 검색할 때 /System 디렉토리를 제외할 수 없습니다.

전체 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는 -andor -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 /SystemANDed된 다음 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)

이것이 뭔가를 명확하게 해주기를 바랍니다. 저는 지금 약간 잠이 부족해서 잘 설명했는지 잘 모르겠습니다.

그건 그렇고, -xFreeBSD의 찾기 옵션은 훌륭한 향상 기능입니다. 부울 논리는 표준 술어를 사용하면 -xdev더욱 복잡해집니다 . (불행히도 GNU find는 그렇지 않습니다 -x. 그러나 FreeBSD를 사용하여 Mac에서 실행하고 있기 때문에 그것은 당신과 관련이 없습니다 find)

관련 정보