내가 발행할 때:
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는 블록과 바이트 이외의 단위를 표준화하지 않습니다.)