명령 행에서 Linux 또는 Mac OS X 디렉토리의 크기를 얻으려면 어떻게해야합니까? [복제]


74

이 질문에는 이미 답변이 있습니다.

Linux 또는 Mac OS X 디렉토리에서 모든 파일의 크기를 (재귀 적으로) 찾기 위해 어떤 명령을 사용합니까?


2
-k옵션을 사용하여 1K 바이트의 블록 크기를 사용할 수 있습니다
Zoker

Disk Inventory X라는이 무료 소프트웨어를 추천하고 싶습니다. 여기에서 다운로드하십시오. derlien.com mac osx에 사용하기 간단합니다
Nimitack

대신에 du, 나는 ncdu당신이 참조를 찾을 수 있습니다, remysharp.com/2018/08/23/cli-improved
Alan Dong

답변:


82

duOS X에서 사용되는 BSD 버전은 512 바이트 블록으로 크기를보고합니다. 크기는 기본적으로 다음 512 바이트 값으로 올림됩니다. 이것은 디스크의 공간을 알려주며, 이는 데이터의 양보다 큽니다. 작은 파일이 많으면 차이가 클 수 있습니다.

다음은 예입니다.

이것은 regular 값입니다 du. 512 바이트 블록입니다.

$ du -s
248   .

-h킬로바이트에서 더 읽을 수의 플래그 결과. 예상대로 512 바이트 블록 수의 절반입니다.

$ du -hs
124K  .

마지막으로, 당신은 사용할 수 있습니다 findawk파일 당신에게 실제 바이트의 합계를 제공 할 수 있습니다. 이것은 느리지 만 작동합니다.

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

이 값은 Finder의 정보 입수 창에서보고 한 숫자와 정확히 일치합니다. (이 파일 세트에는 이상한 포크 나 xattrs가 없습니다.)이보고 된 값보다 훨씬 작습니다 du.

작동 방식은 다음과 같습니다. 모든 파일의 목록을 가져 와서 ls -l; 그런 다음 awk바이트를 계산하는 데 사용됩니다. -type f파일 만 (그리고 디렉토리가)로 전송받을 있도록 플래그가있다 ls. 이 플래그가 없으면 디렉토리 이름도로 전송 ls되며 각 파일은 개별 파일로 한 번, 디렉토리에서 항목으로 한 번 두 번 나열됩니다.

GNU 버전 du은 블록 대신 실제 바이트로 값을 제공 할 수 있습니다. 불행히도의 BSD 버전은 du유연하지 않습니다.


좋은 설명입니다. 흥미롭게도 duGNU coreutils에서 -b옵션을 사용할 때 find파이프 와 다른 결과를 얻습니다 . 36GB 디렉토리의 경우 82KB 차이가 발생합니다.
Stefan Schmidt

좀 더 사람이 읽을 수있는 형식으로 인쇄 할 수있는 방법이 있습니까?
anon58192932

75

단일 파일의 크기 표시

du -h path_to_a_file

디렉토리, 각 하위 디렉토리 및 개별 파일의 내용 크기를 표시합니다.

du -h path_to_a_directory

디렉토리 내용의 크기를 표시하십시오.

du -sh path_to_a_directory


25
du -sch더 쉽게 읽을 수있는 것을 원한다면
Joey

@Johannes,이 의견을 답변으로 게시해야 수락 할 수 있습니까?
Arjan

-c 옵션이 중복되어 있고 (적어도 Mac OS X에서는) du -sh가 부분 합계를 억제합니다.
Daryl Spitzer

아하, 나는 자신의 대답을 받아 들일 수있을 줄 몰랐다. 이제 적어도 사람들은 그 문제가 해결되었다는 것을 알고 있습니다.
Arjan

기꺼이 개선 된 새로운 답변을 기쁘게 받아들입니다.
Daryl Spitzer

9

du파일 크기가 아닌 디스크 사용을 알려줍니다 .

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

위의 터미널 코드 (osx 10.6에 있음)는 최상의 결과를 제공하며 "find ... -exec"보다 빠릅니다.

빠른 벤치 마크

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

Ubuntu에서 동일한 작업을 수행하려는 경우 :find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
Rodrigo Polo

이 결과를 사람이 읽을 수있는 형식으로 얻는 방법이 있습니까?
anon58192932

5

du -ah .모든 파일 및 디렉토리의 크기를 재귀 적으로 표시 하는 것을 사용할 수 있습니다 .

이것을와 결합 sort하여 현재 폴더에서 가장 큰 20 개 디렉토리를 볼 수 있습니다 :

du -ah . | sort -rh | head -20

참고 : 옵션 -h에 대한이 sortOSX / BSD에서 사용할 수 없습니다, 당신은 설치했습니다, 그래서 sort에서 coreutils(예를 통해 brew)와 빈 경로를합니다 적용 PATH, 예를 들어,

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

그렇지 않으면 다음을 사용하십시오.

du -a . | sort -rn | head -20

첫 번째 명령이 macOS 10.12.1 #du -ah에서 작동하지 않습니다. | 정렬 -rh | head -20 sort : invalid option-h 자세한 정보는`sort --help '를 시도하십시오.
nucleartux

2
@nucleartux 명령 아래의 메모를 확인하십시오. 이것은 다음을 통해 macOS에 설치할 수있는 GNU 정렬에서 작동합니다. brew install coreutils그렇지 않으면 BSD없이 BSD sort 명령을 사용하십시오 -h.
kenorb

2

나는 모든 접근 방식을 결합하여 인간이 읽을 수있는 출력과 결합했습니다. 결과는 다음과 같습니다.

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

요점 링크 : https://gist.github.com/mlegenhausen/9365461

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