"find . -size" 명령의 파일 크기 옵션은 무엇입니까?

"find . -size" 명령의 파일 크기 옵션은 무엇입니까?

파일 크기를 바이트 단위로 찾으려면 "c"를 사용한다는 것을 알았습니다.

그래서 find를 사용하여 1000바이트의 파일 크기를 찾을 수 있습니다. -크기 1000c

하지만 Mb, Gb 또는 비트와 같은 다양한 유형의 크기는 어떻습니까? 어떤 문자나 문자를 사용해야 합니까?

답변1

POSIX접미사를 지정하지 않거나 지정된 c접미사만 지정합니다. 접미사가 없으면 값은 512바이트 블록으로 해석되며, c접미사가 있는 값은 사용자가 결정한 대로 바이트 수로 해석됩니다.

예를 들어 일부 구현에서는 더 많은 접미사를 지원합니다.암소 비슷한 일종의 영양find지원하다

  • b512바이트 블록의 경우
  • c바이트용
  • w2바이트 단어의 경우
  • k킬로바이트
  • M메가바이트
  • G기가바이트

답변2

POSIX적으로:

find . -size  1000c # files whose size¹ is exactly 1000 bytes (not characters)
find . -size -1000c # strictly less than 1000 bytes (0 - 999)
find . -size +1000c # strictly more than 1000 bytes (1001 - ∞)

그런 다음 POSIX sh구문을 사용하여 다음을 수행할 수 있습니다.

EiB=$((1024*(PiB=1024*(TiB=1024*(GiB=1024*(MiB=1024*(KiB=1024)))))))
 EB=$((1000*( PB=1000*( TB=1000*( GB=1000*( MB=1000*( kB=1000)))))))

find . -size "$(( 12 * GiB ))c" # exactly 12GiB (12,884,901,888 bytes)
find . -size "$(( 12 * GB  ))c" # exactly 12GB (12,000,000,000 bytes)
find . -size "-$(( 12 * GB ))c" # 0 - 11,999,9999,999 bytes
...

c접미사 가 없으면 동작이 놀라울 수 있습니다.

find . -size  1000 # files whose size, in number of 512-byte units (rounded *up*)
                   # is 1000. So, that's file whose size in bytes ranges from
                   # 1000*512-511 (999*512+1) to 512*1000
find . -size -1000 # files whose size is 999*512 bytes or less
find . -size +1000 # files whose size is 1000*512+1 bytes or more

이는 find이 유틸리티에 대한 POSIX 사양입니다.

이제 다양한 구현에서 find추가 접미사를 지원하지만, 동일한 접미사가 구현에 따라 다르게 해석될 수 있다는 점에 유의하세요.

~처럼@StephenKitt가 지적함,암소 비슷한 일종의 영양find바이트, 워드, 512바이트 단위, kibibyte, mebibyte, gibibyte를 지원 cwbkMG하지만 POSIX에서 요구하는 것처럼 동작합니다. 예 를 들어 파일 크기가 기비바이트(반올림)이기 때문에 엄격하게 12 미만으로 제한되므로 파일 크기는 find위의 것과 find . -size -12G다릅니다. find . -size "-$((12 * GiB))c"11GiB 이하입니다.

예를 들어 find . -size -1G빈 파일(크기가 0인 파일)만 찾습니다. 단일 바이트 파일은 크기가 다음 GiB로 반올림되므로 1GiB로 간주됩니다.

바쁜 상자find접미사는 지원되지만 cwbkGNU와는 다르게 해석됩니다 find. 이것은 또한현재 접미사 없이 처리되는 크기는 POSIX와 호환되지 않습니다..

비지박스의 경우 find,find . -size -12G find . -size "-$(( 12 * GiB ))c"와 마찬가지로 find . -size -1합계의 크기는 0이 아닌 0에서 511까지입니다.

장난감 상자find(예: Android)는 find이 점에서 busybox와 유사하게 동작합니다.POSIX 표준을 준수하지 않음). 또 다른 차이점은 접미사는 대소문자를 구분하지 않고 TPE테비바이트, 페비바이트, 엑비바이트에도 지원되며 d(십진수) 추가 접미사를 사용하여 단위가 1024 대신 1000의 거듭제곱임을 지정할 수 있다는 점입니다. 예를 들어 -size 1kd1024바이트(1KB) 대신 정확히 1000바이트(1KB)인 파일을 찾으세요 -size 1k.

toybox에서는 find접미사 처리가 atolx()기능의 일부로 수행됩니다 . 이는 16진수를 지원하기 때문에 16진수와도 충돌이 발생한다는 find점에 유의하세요 . 0x2바이트 이상 0x2c(44) 512바이트 단위. (8진수) 로 처리 되는데 이는 또 다른 POSIX 비준수입니다.0xffffcbedCBED-size -0x2c-size 010c-size 8c

FreeBSD/잠자리BSD find지원 ckMGTP(안됨)되지만 접미사가 없으면 POSIX처럼 동작하지만 접미사가 있으면 bwEGNU가 아닌 busybox/toybox처럼 동작합니다.find

sfind또는 findbosh 쉘의 내장 동작은 접미사가 대소문자를 구분하지 않고 bwE지원되며 8진수/10진수 및 일부 숫자가 지원된다는 점을 제외하면 FreeBSD와 유사합니다.제품 산술 표현식(예 6x12x8k:) 수락됩니다.

내가 아는 한, 모두오픈BSD,네트워크BSD,이루모스,솔라리스,AIX,HP/사용자 경험c512바이트 단위만 지원되거나 POSIX에서 요구하는 바이트 접미사는 지원되지 않습니다.

요약표:

전통적/POSIX 암소 비슷한 일종의 영양 FreeBSD 찾다 바쁜 상자 장난감 상자
접미사 CWBKMG 미오신 CWBKMGTPECWBKMGTPE 웨스트 버크 cwbkmgtpeCWBKMGTPE (+d)
숫자 형식 소수 소수 소수 12월/10월/16진수/표현식 소수 12월/10월/16진수
-size $n ($n-1)*512+1 ..$n*512 ($n-1)*512+1 ..$n*512 ($n-1)*512+1 ..$n*512 ($n-1)*512+1 ..$n*512 $n*512 $n*512
-size -$n 0 .. ($n-1)*512 0 .. ($n-1)*512 0 .. ($n-1)*512 0 .. ($n-1)*512 0 .. $n*512-1 0 .. $n*512-1
-size +$n ($n*512)+1 .. ($n*512)+1 .. ($n*512)+1 .. ($n*512)+1 .. ($n*512)+1 .. ($n*512)+1 ..
-size ${n}c $n $n $n $n $n $n
-size -${n}c 0 .. $n-1 0 .. $n-1 0 .. $n-1 0 .. $n-1 0 .. $n-1 0 .. $n-1
-size +${n}c $n+1 .. $n+1 .. $n+1 .. $n+1 .. $n+1 .. $n+1 ..
-size $n$unit 해당 없음 ($n-1)*$단위+1 .. $n*$단위 $n*$단위 $n*$단위 $n*$단위 $n*$단위
-size -$n$unit 해당 없음 0 .. ($n-1)*$단위 0 .. $n*$단위-1 0 .. $n*$단위-1 0 .. $n*$단위-1 0 .. $n*$단위-1
-size +$n$unit 해당 없음 $n*$단위+1 .. $n*$단위+1 .. $n*$단위+1 .. $n*$단위+1 .. $n*$단위+1 ..

즉, 이식성을 위해 가장 좋은 옵션은 접미사가 붙은 c소수만 사용하는 숫자(앞에 0이 없음)를 사용하고 단위를 수동으로 계산하는 것입니다.

완전성을 위해 Lglob 한정자 zsh( kmgt대소문자를 구분하지 않지만 pP페비바이트가 아닌 512바이트 단위에 적용됨)는 POSIX/GNU처럼 작동합니다 find( *(LM-12)예: 0~11메비바이트 크기의 파일로 확장).


st_size1 이는 반환된 구조의 속성에 보고된 크기이며, lstat()비정규 파일에 대한 의미는 시스템마다 다를 수 있습니다.

find² FreeBSD/의 조건자도 2일 이상 된 파일 일치(86400*2 - ), 1일보다 오래된 파일 일치(86400.000000001 - ) 와 같은 sfind동일한 구별을 갖습니다 . GNU의 경우 (또는 또는 ) 도 참조하세요 .-Xtime-mtime +1-mtime +1dfind! -newermt -1day1 day agoyesterday

답변3

Stephen Kitt가 언급한 내용에 추가하려면 gnu find를 참고하세요.반올림비교하기 전에 지정된 세분성으로 크기를 조정하세요!

당신이 그렇게한다면

truncate --size=1000 dummy_file_1000
truncate --size=1024 dummy_file_1024

그 다음에

find . -size 1k 
find . -size 1024c

~ 할 것이다아니요같은 결과를 제공합니다!

바라보다찾기 명령: -size 동작

즉, find . -size 1k크기가 [1,1024]인 모든 파일이 나열되며, find . -size 1024c실제 크기가 정확히 1024바이트인 파일만 나열됩니다.

관련 정보