Bash에서 폴더 크기 확인


317

디렉토리 크기를 계산하는 스크립트를 작성하려고하는데 크기가 10GB 미만이고 2GB보다 큰 경우 조치를 수행하십시오. 폴더 이름은 어디에서 언급해야합니까?

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi

1
그리고 그것을 정렬하고 싶다면 : serverfault.com/questions/62411/…
cregox


이것은 인기있는 질문이기 때문에-초보자 가이 질문에 대한 답변을 겪고 도대체 du가 무엇인지, 모든 사람이 이러한 모든 명령을 알고있는 방법 에 대해 더 자세히 알고 man du싶다면 터미널에 입력 하여 설명서에서 du 명령을 조회 할 수 있습니다 . 이것은 당신이 볼 수있는 출력을 표시하고 -h, -c, -s, -b, -B, --apparent-size 등과 같은 모든 플래그를 요약하여 사용하도록 제안합니다. 그런 다음 du특정 사용 사례에 가장 적합한 방법을 스스로 결정할 수 있습니다 .
Josh Desmond

답변:


609

넌 할 수있어:

du -h your_directory

대상 디렉토리의 크기를 제공합니다.

짧은 출력을 원한다면 du -hcs your_directory좋습니다.


15
스크립트 값을 얻으려고 할 때 사람이 읽을 수있는 숫자를 원하지 않습니다.
패디

4
디렉토리 경로를 지정하지 않으면 현재 작업 디렉토리가 기본값이됩니다. 그래서 du -hs== du -hs ..
razz

8
또한 체크 아웃 : du | sort -n크기에 따라 디렉토리를 정렬합니다
최적화

3
du -hcs dir_name/*하위 폴더 포함
20:40에

du -h <dir> | 꼬리 -1?
Alexander Mills

143

하위 폴더가 아닌 폴더 크기 만 보려면 다음을 사용할 수 있습니다.

du -hs /path/to/directory

최신 정보:

du사용 된 디스크 공간 을 보여줍니다. 파일 크기가 아닙니다.

--apparent-size실제 파일 크기의 합계를 보려는 경우 사용할 수 있습니다 .

--apparent-size
      print  apparent  sizes,  rather  than  disk  usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse')
      files, internal fragmentation, indirect blocks, and the like

물론 -h스크립트 안에 (인간이 읽을 수있는) 옵션이 필요하지 않습니다 .

대신 -b스크립트 내에서보다 쉽게 ​​비교할 수 있습니다 .

그러나 그 자체로 -b적용 --apparent-size됩니다. 그리고 그것은 당신이 필요로하지 않을 수도 있습니다.

-b, --bytes
      equivalent to '--apparent-size --block-size=1'

그래서 당신은 --block-size또는-B

#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d "   ")    
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Condition returned True'
fi

몇 년이 지났다는 것을 알고 있지만 조건부에서 정규 표현식과 BASH_REMATCH의 목적이 무엇인지 조금 설명 할 수 있습니까? (또는 해당 변수 / 명령 / 형식의 사용법에 대한 링크를 제공하기 위해) 코드에서 변수의 파일 크기를 가져 와서 10 기가 바이트와 직접 비교할 것으로 예상했을 때 다른 작업은 무엇입니까?
Nordico

2
@Nordico yup. 정규식과 BASH_REMATCH가 필요하지 않아 답변을 업데이트했습니다.
Taxellool

29

요약 ( -s)과 바이트 ( -b)를 사용하십시오 . 을 사용하여 요약의 첫 번째 필드를 잘라낼 수 있습니다 cut. 함께 모아서:

CHECK=$(du -sb /data/sflow_log | cut -f1)

1
쉘 스크립팅을 처음 사용합니다. du 명령의 출력에 디렉토리 이름이 포함되었습니다. 나는 숫자 부분 만 얻을 수 없었습니다. 당신의 대답에서 "잘라 내기"는 수수께끼를 풀었습니다!
simpleDev

26

디렉토리의 크기를 얻으려면 더 이상 아무것도 없습니다.

du --max-depth=0 ./directory

출력은 다음과 같습니다

5234232       ./directory

5
--max-depth출력을 유용하게 제어하는 ​​데 매우 유용합니다! 예를 들어, 디렉토리 내부에서 무슨 일이 일어나고 있는지 잘 du -h --max-depth=1
알고 싶다면


12

폴더의 전체 크기와 MB 또는 GB 형식을 보려면 아래 스크립트를 시도하십시오.

$du -s --block-size=M /path/to/your/directory/

1
os x에서 플래그는 -g1GB 및 -m1MB 카운트입니다. viaman du
Sgnl

5
# 10GB
SIZE="10"


# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"

if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
        echo "Folder is bigger than $SIZE GB"
else
        echo "Folder is smaller than $SIZE GB"
fi

4

도움이된다면 .bashrc또는에 별칭을 만들 수도 있습니다 .bash_profile.

function dsize()
{
    dir=$(pwd)
    if [ "$1" != "" ]; then
            dir=$1
    fi
    echo $(du -hs $dir)
}

현재 디렉토리 또는 인수로 전달한 디렉토리의 크기를 인쇄합니다.


이것은 훌륭한 답변입니다
d8aninja
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.