이 질문에는 이미 답변이 있습니다.
Linux 또는 Mac OS X 디렉토리에서 모든 파일의 크기를 (재귀 적으로) 찾기 위해 어떤 명령을 사용합니까?
이 질문에는 이미 답변이 있습니다.
Linux 또는 Mac OS X 디렉토리에서 모든 파일의 크기를 (재귀 적으로) 찾기 위해 어떤 명령을 사용합니까?
답변:
du
OS X에서 사용되는 BSD 버전은 512 바이트 블록으로 크기를보고합니다. 크기는 기본적으로 다음 512 바이트 값으로 올림됩니다. 이것은 디스크의 공간을 알려주며, 이는 데이터의 양보다 큽니다. 작은 파일이 많으면 차이가 클 수 있습니다.
다음은 예입니다.
이것은 regular 값입니다 du
. 512 바이트 블록입니다.
$ du -s
248 .
-h
킬로바이트에서 더 읽을 수의 플래그 결과. 예상대로 512 바이트 블록 수의 절반입니다.
$ du -hs
124K .
마지막으로, 당신은 사용할 수 있습니다 find
및 awk
파일 당신에게 실제 바이트의 합계를 제공 할 수 있습니다. 이것은 느리지 만 작동합니다.
$ 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
유연하지 않습니다.
du
GNU coreutils에서 -b
옵션을 사용할 때 find
파이프 와 다른 결과를 얻습니다 . 36GB 디렉토리의 경우 82KB 차이가 발생합니다.
단일 파일의 크기 표시
du -h path_to_a_file
디렉토리, 각 하위 디렉토리 및 개별 파일의 내용 크기를 표시합니다.
du -h path_to_a_directory
디렉토리 내용의 크기를 표시하십시오.
du -sh path_to_a_directory
du -sch
더 쉽게 읽을 수있는 것을 원한다면
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
find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
du -ah .
모든 파일 및 디렉토리의 크기를 재귀 적으로 표시 하는 것을 사용할 수 있습니다 .
이것을와 결합 sort
하여 현재 폴더에서 가장 큰 20 개 디렉토리를 볼 수 있습니다 :
du -ah . | sort -rh | head -20
참고 : 옵션 -h
에 대한이 sort
OSX / 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
brew install coreutils
그렇지 않으면 BSD없이 BSD sort 명령을 사용하십시오 -h
.
나는 모든 접근 방식을 결합하여 인간이 읽을 수있는 출력과 결합했습니다. 결과는 다음과 같습니다.
#!/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 } }}'
-k
옵션을 사용하여 1K 바이트의 블록 크기를 사용할 수 있습니다