명령 줄에서 디렉토리 (폴더)의 전체 크기를 어떻게 결정합니까?


785

디렉토리 (폴더)에있는 모든 파일의 총 집계 크기 (디스크 사용량)를 표시하는 간단한 명령이 있습니까?

나는 이것을 시도했지만 그들은 내가 원하는 것을하지 않습니다.

  • ls -l디렉토리의 개별 파일 크기 만 표시합니다.
  • df -h내 디스크의 여유 공간과 사용 된 공간 만 표시합니다.



BTRFS와 같은 CoW 파일 시스템에서는 거의 의미가 없습니다.
val

답변:


1265

명령은 du"각 FILE의 디스크 사용량을 요약하여 디렉토리에 대해 재귀 적으로 요약합니다."

du -hs /path/to/directory
  • -h"사람이 읽을 수있는"숫자를 얻는 140M것입니다. 예를 들어 대신 143260(크기 : KB)
  • -s요약 용입니다 (그렇지 않으면 폴더의 크기뿐만 아니라 폴더의 모든 항목 대해 개별적으로 표시됨)

사용 -h하면서 사람이 읽을 수있는 값을 사용하여 정렬 할 수 있습니다

du -h | sort -h

-h에 플래그는 sort"사람이 읽을 수있는"크기 값을 고려할 것입니다.


모든 파일과 디렉토리를 반복적으로 나열하지 않으려면 --max-depth표시되는 항목 수를 제한하는 매개 변수를 제공 할 수 있습니다 . 가장 흔하게,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
여분의 마일을가는 것에 대한 존중. :)
myusuf3

93
나는 du -sh그것을 기억하는 방법으로 또는 DOOSH를 사용 한다 (참고 : 명령은 메모리 목적을위한 명령 줄 플래그의 구성과 동일하다)
Marco Ceppi

3
--apparent-size라고 불리는 유용한 옵션이 있습니다. 파일이나 디렉토리의 실제 크기를 찾는 데 사용할 수 있습니다 (예 : 디스크의 풋 프린트와 달리). 예를 들어 4 문자의 텍스트 파일은 약 6 바이트를 차지하지만 ~ 4K를 차지하는 것으로 표시됩니다 일반 du -sh 출력 그러나 --apparent-size 옵션을 전달하면 출력은 6이됩니다. man du : 디스크 사용이 아닌 --apparent-size print 겉보기 크기; 겉보기 크기는 일반적으로 작지만 ( 'sparse') 파일의 구멍, 내부 조각화, 간접 블록으로 인해 커질 수 있습니다
Hopping Bunny

4
이것은 OS X에서도 작동합니다! 고맙게도 로컬 컴퓨터와 서버에서 파일을 정리하는 방법을 찾고 있었지만 자동화 된 방법이 작동하지 않는 것 같습니다. 그래서 나는 du -hs *가장 큰 디렉토리로 가서 어떤 파일이 너무 큰지 알았습니다 ... 이것은 좋은 방법이며, 가장 중요한 부분은 아무것도 설치할 필요가 없다는 것입니다! 확실히 내 공감이 마땅하다
Dev

@BandaMuhammadAlHelal 나는 두 가지 이유가 있다고 생각합니다 : 반올림 ( du약간의 반올림, 값이 선택한 단위에 둘 이상의 숫자가있는 경우 소수점을 표시하지 않음) 및 고전적인 1024 대 1000 접두사 문제. 값을 표시하는 단위를 변경 du하는 옵션 -B(또는 --block-size)이 있거나 "원시"값을 바이트 단위로 가져 오는 -b대신 사용할 수 있습니다 -h.
Marcel Stimberg

164

최근에는 훌륭한 ncurses 기반 대화식 도구를 사용하여 디렉토리 크기에 대한 개요를 신속하게 제공합니다. 몇 년 동안 그런 종류의 도구를 검색했습니다.

  • 파일 계층 구조를 빠르게 드릴 다운
  • 당신은 도구 내부에서 예를 들어 거대한 임시 파일을 삭제할 수 있습니다
  • 매우 빠른

커맨드 라인을위한 바오밥 으로 생각하십시오 :

apt-get install ncdu

11
이것은 절대적으로 환상적입니다! DaisyDisk와 마찬가지로 OSX 용
subZero

3
ncdu대단해! 설치 후이 작업을 수행하십시오 ncdu /. 시스템에서 가장 큰 파일을 매우 빨리 찾을 수 있습니다. 또한 hncdu의 콘솔 인터페이스 내부에서을 누르십시오 . 그것은 매우 유용한 단축키를 가지고
블라드 - ardelean

이것은 내가 필요한 것입니다. 매우 간단하고 효율적입니다. 순수한 사랑.
user3790897

52

이 크기는 재귀 적으로 크기를 찾고 맨 아래의 총 크기와 함께 각 폴더 이름 옆에 사람 형식으로 배치합니다.

du -hsc *


10

tree 이 작업에 유용한 또 다른 명령입니다.

이를 통해 설치 sudo apt-get install tree하고 다음을 입력하십시오.

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

에서 남자 나무 :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

아래는 총계, 폴더 및 파일 크기를 인쇄하는 데 사용하는 것입니다.

$ du -sch /home/vivek/* | sort -rh

세부

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

산출

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

대답은 du디렉토리의 전체 크기를 찾는 도구 라는 것이 명백해졌습니다 . 그러나 고려해야 할 몇 가지 요소가 있습니다.

  • 경우에 따라 du출력이 파일 시스템에 의해 할당 된 공간을보고하기 때문에 오해의 소지가있을 수 있습니다. 개별 파일의 크기의 합과 다를 수 있습니다. 일반적으로 파일 시스템은 한 문자 만 저장하더라도 파일에 4096 바이트를 할당합니다!

  • 2의 거듭 제곱과 10 개의 거듭 제곱으로 인한 출력 차이. -h스위치하는 du사람이 읽을 수있는 출력을 제공하는 2 ^ 10 (1024), 2 ^ 20 (1048576) 등에 의해 바이트 수를 나눈다. 많은 사람들이 10의 거듭 제곱 (예 : 1K = 1000, 1M = 1000000)을보고 더 익숙해 져 결과에 놀랄 수 있습니다.

디렉토리에있는 모든 파일의 총 크기를 바이트 단위로 찾으려면 다음을 수행하십시오.

find <dir> -ls | awk '{sum += $7} END {print sum}'

예:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

find-ls-awk는 큰 폴더 # 1에 대해 잘못된 값을 반환합니다 . 새로운 들어 추가 할 수 awk가 --bignum-M; 옵션이 아닌 경우 find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2를 사용하십시오 .
goozez 2016 년

2의 거듭 제곱이 문제이면 --si"-h와 같지만 1024가 아닌 1000의 거듭 제곱을 사용하십시오" 라는 옵션 이 있습니다.
muru

1

읽을 수있는 형식의 디렉토리 크기 만 사용하려면 다음을 사용하십시오.

du -hs directoryname

이것은 아마도 올바른 섹션에 있지 않지만 명령 줄에서 다음을 시도 할 수 있습니다.

ls -sh filename

-s크기이고,는 -h사람이 읽을 수있다.

아래와 같이 목록 -l에 표시하는 데 사용하십시오 ls.

ls -shl

0

du /foldername폴더의 크기를 아는 표준 명령입니다. 매뉴얼 페이지를 읽고 옵션을 찾는 것이 가장 좋습니다.

man du

명령을 사용하기 전에 온라인에서 사용 가능한 매뉴얼 페이지를 읽어야합니다 .


0

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

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

출처


0

원하는 디렉토리에 많은 서브 디렉토리가있는 경우 다음을 사용하십시오.

$ cd ~/your/target/directory
$ du -csh 

-c, 총합 생성 --total
각 인자 만 총 --summarize 디스플레이를 -s
-h 판독 가능한 형식 --human 판독 인쇄 크기 (예를 들면, 1K 234M 2G)

그러면 현재 디렉토리의 모든 파일 / 폴더에서 전체 메모리 사용량을 생성합니다.


-1

내가 생각하는 가장 좋은 것은 다음과 같습니다.

du -h directory_name | tail -n1

이것은 당신이 관심있는 디렉토리의 크기만을 보여줄 것이며 그 디렉토리 안에있는 디렉토리와 파일의 크기는 인쇄하지 않을 것입니다.

폴더의 크기가 크면 du에 시간이 더 걸린다는 점을 추가해야합니다. 이 명령이 작동하려면 인내심이 있어야합니다. 다른 유닉스 명령과 마찬가지로이 명령 time전에 사용하여이 프로세스의 총 시간을 확인할 수 있습니다 .

time du -h directory_name | tail -n1

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