
파일 크기를 바이트 단위로 찾으려면 'c'를 사용한다는 것을 알았습니다.
따라서 다음을 사용하여 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바이트 단위, 키비바이트, 메비바이트, 기비바이트를 지원 하지만 POSIX 에서 요구 cwbkMG
하는 것처럼 동작합니다. 예를 들어 기비바이트 수(반올림)의 크기가 엄격하게 지정된 파일이므로 위에서 설명한 것과 동일하지 않습니다. 12개 미만, 즉 11GiB 이하의 파일입니다.find
find . -size -12G
find . -size "-$((12 * GiB))c"
예를 들어 find . -size -1G
빈 파일(크기가 0인 파일)만 찾습니다. 1바이트 파일은 크기가 다음 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
정확히 1000인 파일을 찾습니다. 의 경우 1024바이트(1킬로바이트) 대신 바이트(1킬로바이트)를 사용합니다 -size 1k
.
toybox에서 find
접미사 처리는 atolx()
에만 사용되는 것이 아닌 기능 의 일부로 수행됩니다 find
. 그러나 이는 16진수를 지원하므로 16진수에서도 0xffff
충돌이 발생합니다 . 0x2바이트 미만이 아닌 0x2c(44) 512바이트 단위 미만입니다. 그리고 또 다른 POSIX 비준수인 (8진수) 로 처리됩니다 .cbedCBED
-size -0x2c
-size 010c
-size 8c
FreeBSD/드래곤플라이 BSD find
지원 ckMGTP
( 아님 bwE
)이지만 접미사 없이 POSIX에서 요구하는 대로 작동하지만 find
접미사²가 있는 경우 GNU가 아닌 비지박스/장난감 상자처럼 작동합니다.
sfind
또는 Bosh 쉘의 내장은 접미사가 대소 문자를 구분하지 않고 지원되며 8진수/10진수 및 일부를 find
제외하고 FreeBSD처럼 동작합니다.bwE
제품 산술 표현식(예 6x12x8k
:)이 허용됩니다.
내가 아는 한, 모든 것들은오픈BSD,NetBSD,일루모스,솔라리스,AIX,HP/UX512바이트 단위 또는 c
POSIX에서 요구하는 바이트에 대해서만 접미사 없음을 지원합니다.
요약 테이블:
전통적/POSIX | 암소 비슷한 일종의 영양 | FreeBSD | 찾다 | 비지박스 | 장난감 상자 | |
---|---|---|---|---|---|---|
접미사 | 씨 | cwbkMG | ckMGTP | cwbkmgtpeCWBKMGTPE | cwbk | cwbkmgtpeCWBKMGTPE (+d) |
숫자 형식 | 소수 | 소수 | 소수 | 12월/10월/16진수/expr | 소수 | 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
반환된 구조의 속성 에 보고된 크기입니다 .lstat()
find
² FreeBSD 에는 동일한 종류의 구별이 있습니다 . 예를 들어 2일 이상 된 파일(86400*2 - )에 일치하는 반면 하루 이상 된 파일(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
~ 할 것이다~ 아니다같은 결과를 줘!
간단히 말해서 - find . -size 1k
크기가 ∈[1,1024]인 모든 파일을 나열하지만 find . -size 1024c
실제 크기가 정확히 1024바이트인 파일만 나열합니다.