codememo

Bash를 사용하여 파일 크기를 확인하려면 어떻게 해야 합니까?

tipmemo 2023. 4. 28. 20:37
반응형

Bash를 사용하여 파일 크기를 확인하려면 어떻게 해야 합니까?

0-size를 확인하는 스크립트가 있지만, 파일 크기를 확인하는 더 쉬운 방법이 있을 것이라고 생각했습니다.예.file.txt일반적으로 100kB입니다. 90kB(0 포함) 미만이면 스크립트 검사를 수행하고, 이 경우 파일이 손상되었기 때문에 새 복사본을 가져오려면 어떻게 해야 합니까?

제가 현재 사용하고 있는 것은...

if [ -n file.txt ]
then
  echo "everything is good"
else
  mail -s "file.txt size is zero, please fix. " myemail@gmail.com < /dev/null
  # Grab wget as a fallback
  wget -c https://www.server.org/file.txt -P /root/tmp --output-document=/root/tmp/file.txt
  mv -f /root/tmp/file.txt /var/www/file.txt
fi

[ -n file.txt ]크기를 확인하지 않습니다.그것은 그 문자열이file.txt길이가 0이 아니므로 항상 성공합니다.

"size is non-zero"(크기가 0이 아님)라고 말하고 싶다면,[ -s file.txt ].

파일 크기를 가져오려면 다음을 사용할 수 있습니다.wc -c크기(파일 길이)를 바이트 단위로 가져오려면:

file=file.txt
minimumsize=90000
actualsize=$(wc -c <"$file")
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize bytes
else
    echo size is under $minimumsize bytes
fi

이 경우, 그것이 당신이 원하는 것처럼 들립니다.

하지만 참고로, 파일이 얼마나 많은 디스크 공간을 사용하고 있는지 알고 싶다면,du -k크기(사용된 디스크 공간)를 킬로바이트 단위로 가져오려면:

file=file.txt
minimumsize=90
actualsize=$(du -k "$file" | cut -f 1)
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize kilobytes
else
    echo size is under $minimumsize kilobytes
fi

출력 형식에 대한 제어가 더 필요한 경우 다음을 참조할 수 있습니다.stat리눅스에서 당신은 다음과 같은 것으로 시작할 것입니다.stat -c '%s' file.txt그리고 BSD와 Mac OS X에서, 비슷한 것.stat -f '%z' file.txt.

stat 파일 크기도 확인할 수 있습니다.몇 가지 방법은 확실히 더 좋습니다: 사용-s파일이 비어 있는지 확인하는 것이 가장 쉬운 방법입니다.크기의 파일을 찾으려면find그것이 확실히 가야 할 길입니다.

저도 좋아합니다.du파일 크기를 KB 단위로 가져오기에는 많은 양이 있지만, 바이트의 경우에는stat:

size=$(stat -f%z $filename) # BSD stat

size=$(stat -c%s $filename) # GNU stat?

AWK와 이중 괄호가 있는 대체 솔루션:

FILENAME=file.txt
SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

if ((SIZE<90000)) ; then
    echo "less";
else
    echo "not less";
fi

만약 당신이find에서는 이 구문을 처리하며, 사용할 수 있습니다.

find -maxdepth 1 -name "file.txt" -size -90k

출력됩니다.file.txt규모가 클 경우에만 눈에 띄다file.txt90k 미만입니다.스크립트 실행 방법script한다면file.txt크기가 90k 미만입니다.

find -maxdepth 1 -name "file.txt" -size -90k -exec script \;

파일 크기만 원하는 경우:

cat $file | wc -c

샘플 출력:

203233

이것은 Linux와 macOS 모두에서 작동합니다.

function filesize
{
    local file=$1
    size=`stat -c%s $file 2>/dev/null` # Linux
    if [ $? -eq 0 ]
    then
        echo $size
        return 0
    fi

    eval $(stat -s $file) # macOS
    if [ $? -eq 0 ]
    then
        echo $st_size
        return 0
    fi

    return -1
}

사용:

python -c 'import os; print (os.path.getsize("... filename ..."))'

Python의 모든 맛에 대해 휴대가 가능하며 다양한 기능을 사용할 수 있습니다.stat방언

Linux와 Mac OS X(및 다른 BSD 시스템)에서 파일 크기를 모두 가져오는 경우에는 많은 옵션이 없으며 여기에 제시된 대부분의 옵션은 하나의 시스템에서만 작동합니다.

정해진f=/path/to/your/file,

LinuxMac의 Bash 모두에서 작동하는 기능:

size=$( perl -e 'print -s shift' "$f" )

또는

size=$( wc -c "$f" | awk '{print $1}' )

다른 답변은 Linux에서는 작동하지만 Mac에서는 작동하지 않습니다.

  • du을 가지고 있지 않습니다.-bMac에서 옵션을 사용하면 BLOCKSIZE=1 트릭이 작동하지 않습니다("최소 블록 크기는 512"로 잘못된 결과로 이어집니다.)

  • cut -d' ' -f1맥에서는 숫자가 오른쪽으로 정렬되어 있고 앞쪽에 공백이 있을 수 있기 때문에 작동하지 않습니다.

만약 한 것이 하다면, 그서만당약유신것연이한필면다그은것, 래하요이▁so입니다.perl-s, 연자산, 는또wc -c에 파이프로 연결된.awk '{print $1}'(선행 공백은 무시됩니다.)

의 나머지 는, 그고물론, 당의원래질나대부는해서분에머지문의리신▁the,대는서,해,-lt(또는)-gt는 다음과 같습니다.

if [ $size -lt $your_wanted_size ]; then 타기.

gniourf_gniourf의 답변에 따르면,

find "file.txt" -size -90k

라고 쓸 입니다.file.txt규모가 클 경우에만 눈에 띄다file.txt 및 미니다입입니다.

"file.txt" -size -90k -exec 명령 \;

다음과 같은 경우 명령을 실행합니다.file.txt크기가 90K 미만입니다.저는 이것을 리눅스에서 테스트했습니다.출처,

인수( 다음 인수행령명(수인▁following()-H,-L그리고.-Poptions)는 '-'로 시작하는 첫 번째 인수까지 검사할 파일 또는 디렉토리의 이름으로 간주됩니다. …

(추가됨).

ls -l $file | awk '{print $6}'

ls 명령이 #6 열에 파일 크기를 보고한다고 가정합니다.

나는 사용할 것입니다.du--threshold이위하여모든버전서사에용수할않의 모든 에서 이 옵션을 사용할 수 .du그러나 GNU 버전에서 구현됩니다.

du(1)의 설명서에서 인용한 내용:

-t, --threshold=SIZE
       exclude entries smaller than SIZE if positive, or entries greater
       than SIZE if negative

제 솔루션은 다음과 같습니다.du --threshold=OP의 사용 사례:

THRESHOLD=90k
if [[ -z "$(du --threshold=${THRESHOLD} file.txt)" ]]; then
    mail -s "file.txt size is below ${THRESHOLD}, please fix. " myemail@gmail.com < /dev/null
    mv -f /root/tmp/file.txt /var/www/file.txt
fi

그것의 장점은,du알려진 형식으로 해당 옵션에 대한 인수를 수락할 수 있습니다(인간의 경우).10K,10MiB가 없습니다. 으로 변환할 필요가 없습니다.du처리합니다.

참고로, 여기 이것에 대한 설명이 있습니다.SIZE페이지의 :man 페의인수:

The SIZE argument is an integer and optional unit (example: 10K is 
10*1024). Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers
of 1000). Binary prefixes can be used, too: KiB=K, MiB=M, and so on.

Mac에 있는 경우 다음 작업을 수행합니다.stat -f %z "/Users/Example/config.log" 바로 그거야!

언급URL : https://stackoverflow.com/questions/5920333/how-can-i-check-the-size-of-a-file-using-bash

반응형