파일 크기를 바이트 단위로 찾으려면 "c"를 사용한다는 것을 알았습니다.
그래서 find를 사용하여 1000바이트의 파일 크기를 찾을 수 있습니다. -크기 1000c
하지만 Mb, Gb 또는 비트와 같은 다양한 유형의 크기는 어떻습니까? 어떤 문자나 문자를 사용해야 합니까?
답변1
POSIX접미사를 지정하지 않거나 지정된 c
접미사만 지정합니다. 접미사가 없으면 값은 512바이트 블록으로 해석되며, c
접미사가 있는 값은 사용자가 결정한 대로 바이트 수로 해석됩니다.
예를 들어 일부 구현에서는 더 많은 접미사를 지원합니다.암소 비슷한 일종의 영양find
지원하다
b
512바이트 블록의 경우c
바이트용w
2바이트 단어의 경우k
킬로바이트M
메가바이트G
기가바이트
답변2
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
접미사는 지원되지만 cwbk
GNU와는 다르게 해석됩니다 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 1kd
1024바이트(1KB) 대신 정확히 1000바이트(1KB)인 파일을 찾으세요 -size 1k
.
toybox에서는 find
접미사 처리가 atolx()
기능의 일부로 수행됩니다 . 이는 16진수를 지원하기 때문에 16진수와도 충돌이 발생한다는 find
점에 유의하세요 . 0x2바이트 이상 0x2c(44) 512바이트 단위. (8진수) 로 처리 되는데 이는 또 다른 POSIX 비준수입니다.0xffff
cbedCBED
-size -0x2c
-size 010c
-size 8c
FreeBSD/잠자리BSD find
지원 ckMGTP
(안됨)되지만 접미사가 없으면 POSIX처럼 동작하지만 접미사가 있으면 bwE
GNU가 아닌 busybox/toybox처럼 동작합니다.find
sfind
또는 find
bosh 쉘의 내장 동작은 접미사가 대소문자를 구분하지 않고 bwE
지원되며 8진수/10진수 및 일부 숫자가 지원된다는 점을 제외하면 FreeBSD와 유사합니다.제품 산술 표현식(예 6x12x8k
:) 수락됩니다.
내가 아는 한, 모두오픈BSD,네트워크BSD,이루모스,솔라리스,AIX,HP/사용자 경험c
512바이트 단위만 지원되거나 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이 없음)를 사용하고 단위를 수동으로 계산하는 것입니다.
완전성을 위해 L
glob 한정자 zsh
( kmgt
대소문자를 구분하지 않지만 pP
페비바이트가 아닌 512바이트 단위에 적용됨)는 POSIX/GNU처럼 작동합니다 find
( *(LM-12)
예: 0~11메비바이트 크기의 파일로 확장).
st_size
1 이는 반환된 구조의 속성에 보고된 크기이며, lstat()
비정규 파일에 대한 의미는 시스템마다 다를 수 있습니다.
find
² FreeBSD/의 조건자도 2일 이상 된 파일 일치(86400*2 - ), 1일보다 오래된 파일 일치(86400.000000001 - ) 와 같은 sfind
동일한 구별을 갖습니다 . GNU의 경우 (또는 또는 ) 도 참조하세요 .-Xtime
-mtime +1
-mtime +1d
find
! -newermt -1day
1 day ago
yesterday
답변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바이트인 파일만 나열됩니다.