"find -size -1G"가 파일을 찾지 못하는 이유는 무엇입니까?

"find -size -1G"가 파일을 찾지 못하는 이유는 무엇입니까?

내가 발행할 때:

find / \( -type f -size +10M \) -and \( -type f -size -1G \)

그러나 다음을 입력하면 결과가 없습니다.

find / \( -type f -size +10M \) -and \( -type f -size -1000M \)

일부 파일을 반환합니다.

뭐가 문제 야? 측정 장치 양쪽에서 서로 다른 측정 단위를 사용할 수 없습니까 -and?

답변1

-and문제는 연산자 와 관련된 것이 아니라 매개변수의 직관적이지 않은 구문과 관련이 있습니다 -size. 인수는 주어진 단위의 최대 크기가 아니라 계산을 수행할 최대 수와 단위입니다. 이 테스트는 -size -1k"1kB 미만"을 의미하는 것이 아니라 "kB 수(반올림)가 1 미만(및 같지 않음)"을 의미합니다. 따라서 크기가 0인 파일만 일치하며 , 등도 -size -1k마찬가지입니다 .-size -1M-size -1G

30 바이트 이하 의 파일 2개를 일치시키려면 , -size -2G또는 -size -1025M등을 사용하십시오( -2G같지 않은지 확인 -2048M). 또는 "이 크기보다 훨씬 크다"는 뜻의 ! -size +1G크기 수정자와 함께 -를 사용하세요. +2 30 -1바이트 이하의 파일을 일치시키려면 -size -1073741824c.

내가 그렇게 이상하다고 생각하는 이유는 블록을 계산하는 와의 역사적 호환성 때문입니다. 예를 들어 7.5 블록을 차지하는 파일은 실제로 8 블록을 차지하고 마지막 블록은 채워지지 않기 때문에 반올림이 의미가 있습니다. 즉, "7블록 이하를 차지한다"는 의미입니다. 유닛을 추가하는 것은 유닛을 블록 크기로 만드는 것과 같으므로 "7kB 이하를 차지한다"는 의미입니다.-size -NUMBERUNIT-size -NUMBER-size -8-size -8k

(이 답변은 GNU find에 관한 것입니다. 일부 다른 구현은 다르게 동작하며 POSIX는 블록과 바이트 이외의 단위를 표준화하지 않습니다.)

관련 정보