명령 행에서 디렉토리의 크기를 어떻게 얻습니까?


1066

lsoption 명령을 사용하여 디렉토리 (디렉토리 및 하위 디렉토리 포함)의 크기를 얻으려고했습니다 l. 파일 ( ls -l file name)에서 작동하는 것 같지만 디렉토리의 크기 (예 ls -l /home:)를 얻으려고하면 4096 바이트 만 얻지 만 훨씬 큽니다.


18
1) 엄밀히 말하면 할 수 없습니다. Linux에는 폴더가 아닌 디렉토리가 있습니다. 2) 디렉토리의 크기 (다른 파일을 가리키는 inode를 보유하는 특수 파일)와 디렉토리의 내용 크기 사이에는 차이가 있습니다. 다른 사람들이 지적했듯이 du 명령은 후자를 제공하므로 원하는 것으로 나타납니다.
jamesqf

11
새로 워진 것처럼 -h옵션에 추가 할 수 있는 유용한 옵션 -l(예 ls -lh:)을 1130301 대신 1.1M과 같이 인간 친화적 인 표기법으로 인쇄 할 수 있는 유용한 옵션 만 지적 하겠습니다. du -hs@sam이 디렉토리에 대한 귀하의 질문에 대한 답변으로 제공 한 명령 에서 "은 사람이 읽을 수 있음"을 의미하며 df -h, 사람이 읽을 수있는 디스크의 사용 가능한 여유 공간을 보여줍니다.
msouth

답변:


1490

du -sh file_path

설명

  • du( d isc u sage) 명령은 file_path 공간 사용량을 추정합니다.
  • 옵션 -sh은 (에서 man du)입니다.

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    둘 이상의 디렉토리를 확인하고 총계를 보려면 다음을 사용하십시오 du -sch.

      -c, --total
             produce a grand total
    

44
... 하드 링크가 없다면 ;-) stackoverflow.com/questions/19951883/…
Rmano

15
이것은 내가 좋아하는 대답입니다. <3 그것은 요약되어 있고 명령에 대한 일종의 소개 du이며 또한 자세한 내용을 검색 할 수있는 방법을 제공합니다 man du.

유닉스 계열 제조업체를위한 힌트 : 다음에는 "diskusage"명령을 먼저 수행하거나 "디스크 사용"을 실행 한 다음 바로 가기를 사용하십시오. ...;)
jave.web

find 예를 들어 현재 경로에서 특정 하위 디렉토리의 공간을 계산하는 데 매우 $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
유용

321

다음 du명령을 사용하십시오 .

du -sh -- *

현재 디렉토리에서 숨겨지지 않은 모든 디렉토리, 파일 등을 사람이 읽을 수있는 형식으로 누적 디스크 사용량을 제공합니다.

df명령을 사용 하여 디렉토리를 포함하는 파일 시스템의 여유 공간을 알 수 있습니다 .

df -h .

4
du -sh *해당 디렉토리의 파일이 대시로 시작하면 "알 수없는 옵션"오류가 발생하기 시작합니다. 더 안전한du -sh -- *
mpen

1
du -sh *은 숨겨진 폴더의 메모리 사용량을 표시하지 않습니다
Prashant Prabhakar Singh

4
du -sh -- * .*도트 파일을 포함합니다. .git예를 들어, 큰 디렉토리 를 포함하는 데 유용합니다 . 또는 zsh setopt globdots에서는 기본적으로 도트 파일을 glob 할 수 있습니다 .
cbarrick

1
무엇을 --합니까? 나는 그것이 옵션 인수를 끝내기 위해 쉘 내장에 적용된다는 것을 알고 있지만 du내장되어 있지는 않습니다 du. linux.die.net/man/1/du
flow2k

때때로 -b( --apparent-size) 를 추가하고 싶을 수도 있습니다
elig September

196

du당신의 친구입니다. 디렉토리의 전체 크기를 알고 싶다면 디렉토리로 이동하여 다음을 실행하십시오.

du -hs

어떤 하위 폴더가 얼마나 많은 디스크 공간을 차지하는지 알고 싶다면?! 이 명령을 확장하여 다음을 수행 할 수 있습니다.

du -h --max-depth=1 | sort -hr

모든 하위 폴더의 크기를 제공합니다 (1 단계). 출력이 정렬됩니다 (맨 위의 가장 큰 폴더).


그것은 리눅스의 일부 (아마도 오래된?) 버전에서 보이는데 sort에는 h 스위치가 없으므로 다음으로 찾을 수있는 가장 좋은 명령은 다음과 같습니다. du -c --max-depth = 1 | sort -rn
richhallstoke

@richhallstoke ncdu파일 을 사용 하면 기본적으로 내림차순으로 정렬됩니다.
Armfoot 2019

3
"| sort
-hr

67

du괜찮은 결과를 얻으려면 100 개의 인수를 전달해야하기 때문에 사용하기가 복잡 할 수 있습니다. 숨겨진 폴더의 크기를 파악하는 것은 훨씬 더 어렵습니다.

당신의 인생을 쉽게 만들고 사용하십시오ncdu .

ncdu

쉽게 찾아 볼 수있는 폴더 별 요약을 얻을 수 있습니다.


9
최소한 시스템에 소프트웨어를 설치할 수있는 사람들에게는 이것이 정답이어야합니다. 불행히도 나는 대부분의 사람들이 이것을 볼만큼 충분히 아래로 스크롤하지 않을 것이라고 생각합니다.
DavidR

@ RickyNotaro-Garcia Nope, 이것은 숨겨진 객체를 무시하고 큰 디렉토리에 매달려 있습니다. 파이프가 12 개인 OK 솔루션이있을 수 있지만 왜 생명을 낭비 하는가?
Teque5

@ RickyNotaro-Garcia 내 전체 의견을 읽으십시오 : 시도는 숨겨진 개체를 무시 하고 큰 디렉토리에 매달려 있습니다.
Teque5

2
ncdu대단합니다. 잊을 때 항상이 명령을 검색합니다. 빠르고 탐색하기 쉽고 큰 폴더를 쉽게 찾을 수 있습니다. 참고로, macOS 및 모든 Linux 시스템에서도 사용할 수 있습니다.
Lukas

.. 키 ncdu를 눌러 폴더를 바로 삭제할 수 있습니다d
ccpizza

32

다른 사람들도 언급 du했지만 Ncdu 는 ncurses 버전이며 du대화 형 기능을 제공합니다. 디렉토리 계층 구조를 직접 탐색하고 하위 디렉토리의 크기를 볼 수 있습니다.


26

du명령은 파일의 디스크 사용량을 보여줍니다.

-h옵션은 사람이 읽을 수있는 형태 (예 : 4k, 5M, 3G)로 결과를 표시합니다.

du -h (file name)

22

위의 모든 예는 디스크 의 데이터 크기를 나타냅니다 (예 : 특정 파일이 사용하는 디스크 공간의 양, 일반적으로 실제 파일 크기보다 큼). 데이터가 실제로이 특정 디스크에 저장되지 않고 inode 참조 만 존재하는 경우, 정확한 보고서를 제공하지 않는 상황이 있습니다.

예를 들어, 단일 파일에서 ls -l을 사용했는데 디스크의 파일 크기가 아니라 파일의 실제 크기를 반환했습니다.

실제 파일 크기를 알고 싶다면 du에 -b 옵션을 추가하십시오.

du -csbh .

예. 파일을 압축 및 중복 제거하는 sdfs를 사용하고 있기 때문에 왜 그렇게 낮은 숫자를보고했는지 알 수 없었습니다. ls 파일의 실제 크기는 다음을 사용하여 찾을 수 있습니다. du -b
Ryan Shillington

15

개인적으로 사용하고 싶지 않다면 이것이 최선이라고 생각합니다. ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

이것은 현재 드라이브에 남은 디스크 공간을 보여주고 모든 파일 / 디렉토리가 차지하는 양을 알려줍니다. 예를 들어

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

참고로, 디스크 크기를보고하는 것 같습니다. 즉, 아마도 가장 가까운 4KB로 채워질 것입니다.
mpen


9

현재 디렉토리 아래의 모든 파일을 재귀 적으로 찾고 크기를 요약하십시오.

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

나는 -not -type d일반 파일 ( -type f)의 크기뿐만 아니라 심볼릭 링크의 크기 등을 합산 하는 데 사용 합니다 .
anton_rh

파일을 저장하는 데 필요한 오버 헤드가 아니라 파일 자체의 크기 만 가지기 때문에 이는 훌륭합니다.
bballdave025

9

다음은 .bash_aliases에 대한 함수입니다.

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

샘플 출력 :

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

하위 디렉토리의 경우 :

$ dusort .
$ dusort /var/log/


6

디렉토리를 준수하는 디렉토리를 구성하기 위해 매체에 저장된 모든 보조 정보의 크기를 고려 du하므로 디렉토리에서 매체가 차지하는 공간을 일반적으로 디렉토리에있는 모든 파일의 전체 크기보다 큰 공간 을 인쇄합니다. du파일 시스템 형식으로.

파일 시스템이 압축 가능한 경우, 파일 시스템에 du의해 파일이 내부적으로 압축 될 수 있으므로 파일에 포함 된 압축되지 않은 정보보다 매체 공간을 덜 차지하기 때문에 모든 파일의 총 크기보다 더 적은 수를 출력 할 수 있습니다. 스파 스 파일이있는 경우에도 동일합니다.

디렉토리에 하드 링크가있는 경우 디렉토리의 du여러 다른 파일이 매체의 동일한 데이터를 참조하므로 더 작은 값을 인쇄 할 수도 있습니다.

디렉토리에있는 모든 파일의 간단한 총 크기를 얻으려면 다음과 같은 한 줄짜리 셸 표현식을 사용할 수 있습니다 (GNU 시스템 가정).

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

또는 더 짧게 :

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

디렉토리의 모든 비 디렉토리 파일 (및 서브 디렉토리를 재귀 적으로)의 크기를 하나씩 합칩니다. 심볼릭 링크의 경우 심볼릭 링크가 가리키는 파일이 아닌 심볼릭 링크의 크기를보고합니다.


5

당신이 사용할 수있는

du -sh directory/

du -sh filename

폴더 또는 파일이 차지하는 공간을 알 수 있습니다.

df -h

사람이 읽을 수있는 형식으로 디스크 사용량을 보여줍니다.

라는 GUI 기반 프로그램도 있습니다 Disk Usage Analyzer.


5

다음은 POSIX 스크립트입니다.

  • 파일
  • 파일
  • 디렉토리
  • 디렉토리
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

출처

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