ls를 사용하여 디렉토리 및 전체 크기 나열


827

lsUnix에서 하위 디렉토리의 전체 크기와 모든 내용을 나열하는 것이 가능 4K합니까 ( 일반적으로 디렉토리 파일 자체라고 가정)?

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

매뉴얼 페이지를 수색 한 후 비어 있습니다.


4
대신 du -s를 사용하려고합니다.
guns

21
오리 검색 :alias ducks='du -cksh * | sort -hr | head -n 15'
Sebi

답변:


1550

다음과 같은 것을 시도하십시오 :

du -sh *

짧은 버전 :

du --summarize --human-readable *

설명:

du: D ISK U 세이지

-s: 지정된 각 파일에 대한 요약을 표시합니다. (에 해당 -d 0)

-h: "인간이 읽을 수있는"출력. 이용 유닛 접미사 : B의 YTE, K의 ibibyte (킬로바이트), M의 ebibyte MIB (), G의 ibibyte (GIB), T의 ebibyte (TiB 크기) 및 P의 ebibyte (PIB). (BASE2)


55
또한 -c (총합계 생성)가 좋습니다.
meridius

50
du --max-depth 1은 트리에서 깊이가 1 인 파일 / 폴더 크기 만 표시하며 더 이상 혼란스럽지 않고 폴더 내에서 큰 폴더를 쉽게 찾을 수 있습니다.
CousinCocaine

12
숨겨진 파일도 포함하는 방법?
Zakaria Braksa

5
zsh의 @Zak를 사용하면 *(D)숨겨진 파일 ( d ot)과 일반 파일 을 일치 시킬 수 있습니다 . bash를 사용할 때 * .[!.]*두 가지를 모두 사용할 수 있습니다 .
Sebi

22
공간이 어디로 가는지 명확하게 파악하려면 du -sch * .[!.]* | sort -rh훌륭합니다 (정렬 된 결과 표시). Mac에서 수행 brew install coreutils한 다음du -sch * .[!.]* | gsort -rh
Guig

319

du -sk * | sort -n폴더를 크기별로 정렬합니다. 공간을 정리할 때 도움이됩니다 ..


11
| tail -r가장 큰 순서로 정렬하려면 a 를 추가하십시오 .
Phrogz

68
sort -rn숫자를 역순으로 정렬합니다. sort -rn | head -n 10관심이 있다면 상위 몇 개만 표시합니다.
AgileTillIDie

14
sort -rhdu -cksh *사람이 읽을 수있는 단위를 정렬 할 때 잘 작동 합니다.
Sebi

@Sebi -h는 불행히도 Mac에서 정렬을위한 유효한 매개 변수가 아닙니다
anon58192932

@Sebi도 -c가 필요하지 않습니다 . du -ksh | sort -rn와 같습니다 du -cksh | sort -rn. 마찬가지로 du -ksh동일하다 du -cksh.
hello_there_andy

108
du -sh * | sort -h

이것은 사람이 읽을 수있는 형식으로 표시됩니다.


6
상세 정보 sort -h여기 : gnu.org/software/coreutils/manual/... 그것은 정렬 특히있다 103K, 102M, 1.1G전부는 아니지만,이 요즘 많은 시스템에 사용할 수 있어야 등.
Evgeni Sergeev

duh -shm * | 정렬 -n?
std''OrgnlDave

10
훌륭하고 하나의 작은 추가 기능 du -sh * | sort -rh(-r은 더 큰 폴더를 먼저 나열하는 경우)
artm

숨겨진 파일 / 디렉토리 포함 du -sh $(ls -A) | sort -h
jmd_dk

55

사람이 읽을 수있는 형식으로 현재 디렉토리에서 가장 큰 디렉토리를 나열하려면 다음을 수행하십시오.

du -sh * | sort -hr

행 수를 제한하는 더 좋은 방법은 다음과 같습니다.

du -sh * | sort -hr | head -n10

-n나열된 행 수를 제한하기 위해 플래그 접미 부를 늘릴 수있는 위치

견본:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

읽기가 더 편리합니다. :)


27

ls -lh형식으로 표시하려면 다음을 사용하십시오.

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

Awk 코드 설명 :

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

샘플 출력 :

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd

이 출력을 정렬하는 방법이 있습니까? 또한 맥을 사용하는 사람이라면 제거하면 훌륭하게 작동합니다.--color=no
anon58192932

@ anon58192932 sort --key=5,5h다섯 번째 열에서 '사람이 읽을 수있는 단위'를 정렬 하기 위해 출력을 파이프 할 수 있습니다.
Sebi

sort: stray character in field spec: invalid field specification 5,5h '를 반환합니다 . 난 정말 Mac을 싫어하는 경우가 종종있다 = \
anon58192932

@ anon58192932 mac과 관련된 질문을 할 수 있습니다. 도와 줄 사람이있을 것입니다. 이 질문은 GNU / 리눅스
Sebi

2
이 답변을 사용하여 색상을 유지하는 방법이 있습니까?
Pablo Canseco

20

원하는 명령은 'du -sk'du = "디스크 사용량"입니다.

-k 플래그는 du 기본 디스크 섹터 (512 바이트 블록) 대신 킬로바이트 단위로 출력합니다.

-s 플래그는 최상위 디렉토리 (즉, 기본적으로 현재 디렉토리 또는 명령 행에 지정된 디렉토리)의 항목 만 나열합니다. du가 이와 관련하여 ls의 반대 행동을 갖는 것은 이상합니다. 기본적으로 du는 각 하위 디렉토리의 디스크 사용량을 재귀 적으로 제공합니다. 반대로 ls는 지정된 디렉토리의 목록 파일 만 제공합니다. (ls -R은 재귀 동작을 제공합니다.)


루트 디렉토리에서 이것을 시도했지만 여전히 하위 디렉토리를 나열하려고 시도하여 많은 메시지를 생성합니다.
Nagev

14

이 쉘 함수 선언을 쉘 초기화 스크립트에 넣으십시오.

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}

나는 그것을 전화 duls는 모두의 출력을 보여주기 때문에 du하고 ls(순서대로) :

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

설명:

paste유틸리티는 당신이 그것을 제공하는 사양에 따라 입력에서 열을 만듭니다. 두 개의 입력 파일이 주어지면 탭을 구분 기호로 사용하여 파일을 나란히 놓습니다.

우리는 그것의 출력을 줄 du -hs -- "$@" | cut -f1첫 번째 파일 (정말 입력 스트림)과의 출력으로 ls -ld -- "$@"두 번째 파일로 저장됩니다.

이 함수에서 "$@"모든 명령 행 인수 목록을 각각 큰 따옴표로 묶어 평가합니다. 따라서 공백 등으로 글러브 문자 및 경로 이름을 이해할 수 있습니다.

이중 빼기 ( --)는 명령 행 옵션의 끝을 du및으로 신호합니다 ls. 이러한없이 말을 duls -l혼동 할 du과에 대한 모든 옵션 duls혼동 것없는 ls(두 유틸리티에 존재하며 옵션은 동일한 것을 의미하지 않을 수 있습니다, 그것은 꽤 엉망이 될 것입니다).

cut이후 du단순히의 첫 번째 열에 잘라내 du -hs출력 (크기)를.

나는 du출력을 왼쪽에 두기로 결정했다 .

명령은 명령 행 플래그를 승인하지 않습니다.

이것은 모두에서 테스트되었습니다 bash와에 ksh93. 작동하지 않습니다 /bin/sh.


좋습니다. 한 줄의 권한 크기
Ben

7

대신 항상 du -sk( -k파일 크기를 킬로바이트로 표시하는 플래그)를 사용합니다.


5
이것은 @molf가 더 정확하고 잘 설명 된 답변에 추가 정보를 제공하는 주석이어야합니다. 그것은 자신의에 그것은 답으로 간주해서는 안
code_monk가


7

ncdu ncurses du

이 멋진 CLI 유틸리티를 사용하면 대화식으로 큰 파일과 디렉토리를 쉽게 찾을 수 있습니다.

예를 들어, 잘 알려진 프로젝트 의 트리 내부에서 다음을 수행합니다.

sudo apt-get install ncdu
ncdu

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 키보드로 아래로 입력하여 /drivers폴더 로 이동하면 다음을 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

ncdu 전체 트리에 대해 시작시 한 번만 파일 크기를 재귀 적으로 계산하므로 효율적입니다.

"총 디스크 사용량"대 "피상 크기"는 다음과 비슷하며 du, 'du'의 출력이 종종 'du -b'와 다른 이유는 무엇입니까?

프로젝트 홈페이지 : https://dev.yorhel.nl/ncdu

관련 질문 :

우분투 16.04에서 테스트되었습니다.

ncdu 비 대화식 사용법

또 다른 멋진 기능은 ncdu먼저 크기를 JSON 형식으로 덤프 한 다음 나중에 재사용 할 수 있다는 것입니다.

예를 들어 파일을 생성하려면 다음을 실행하십시오.

ncdu -o ncdu.json

그런 다음 대화식으로 검사하십시오.

ncdu -f ncdu.json

NFS와 같이 매우 크고 느린 파일 시스템을 처리하는 경우 매우 유용합니다.

이 방법으로 먼저 한 번만 내보낼 수 있습니다. 몇 시간이 걸리고 파일을 탐색하고 종료하고 다시 탐색하는 등의 작업을 수행 할 수 있습니다.

출력 형식은 JSON이므로 다른 프로그램과 함께 쉽게 재사용 할 수 있습니다. 예 :

ncdu -o -  | python -m json.tool | less

간단한 디렉토리 트리 데이터 구조를 나타냅니다.

[
    1,
    0,
    {
        "progname": "ncdu",
        "progver": "1.12",
        "timestamp": 1562151680
    },
    [
        {
            "asize": 4096,
            "dev": 2065,
            "dsize": 4096,
            "ino": 9838037,
            "name": "/work/linux-kernel-module-cheat/submodules/linux"
        },
        {
            "asize": 1513,
            "dsize": 4096,
            "ino": 9856660,
            "name": "Kbuild"
        },
        [
            {
                "asize": 4096,
                "dsize": 4096,
                "ino": 10101519,
                "name": "net"
            },
            [
                {
                    "asize": 4096,
                    "dsize": 4096,
                    "ino": 11417591,
                    "name": "l2tp"
                },
                {
                    "asize": 48173,
                    "dsize": 49152,
                    "ino": 11418744,
                    "name": "l2tp_core.c"
                },

우분투에서 테스트 18.04.


1
놀랄 만한. 공유해 주셔서 감사합니다!
Frank Fu

ncdu가 갈 길입니다 ...하지만 JSON 파일을 검색 할 수 있는지 알고 있습니까? 즉, 특정 파일 / 폴더의 전체 경로를 가져옵니다.
FGV

1
@ FGV ncdu가 출력 할 수 있다고 생각하지 않습니다. 하나의 가능성은 JSON을 구문 분석하는 간단한 파이썬 스크립트를 해킹하는 것입니다.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

4

du -sch *는 같은 디렉토리에 있습니다.


4

이것은 내가 좋아하는 것입니다

업데이트 : 나는 현재 디렉토리에 파일을 표시하지 않았기 때문에 이전 디렉토리를 좋아하지 않았으며 디렉토리 만 나열했습니다.

/var우분투의 출력 예 :

sudo du -hDaxd1 /var | sort -h | tail -n10

4.0K    /var/lock
4.0K    /var/run
4.0K    /var/www
12K     /var/spool
3.7M    /var/backups
33M     /var/log
45M     /var/webmin
231M    /var/cache
1.4G    /var/lib
1.7G    /var

3

이것들은 모두 훌륭한 제안이지만 내가 사용하는 것은 다음과 같습니다.

du -ksh * | sort -n -r

-ksh 파일과 폴더가 사람이 읽을 수있는 형식과 메가 바이트, 킬로바이트 등으로 나열되어 있는지 확인하십시오. 그런 다음 숫자로 정렬하고 정렬을 반대로하여 더 큰 파일을 먼저 정렬합니다.

이 명령의 유일한 단점은 컴퓨터가 기가 바이트가 메가 바이트보다 크다는 것을 모르므로 숫자로만 정렬되며 종종 다음과 같은 목록을 찾을 수 있다는 것입니다.

120K
12M
4G

장치를주의해서 살펴보십시오.

이 명령은 Mac에서도 작동합니다 ( sort -h예를 들어).


명령 에서 -h깃발 을 제거하면 du그 단점을 줄일 수 있습니다
Carlos Ricardo

또는 정렬 -h대신 사용할 수도 있습니다 -n.
Sebi

grep G를 통해 파이프로 연결하십시오
gforce89

3
du -S

du 에는 또 다른 유용한 옵션이 있습니다. du-S, --separate-dirs 에게 서브 디렉토리의 크기를 포함하지 말라고 알려주 는 경우가 있습니다.

예 1- 디렉토리의 파일 크기 표시 합니다 .

du -Sh  * 
3,1G    10/CR2
280M    10

예 2-디렉토리의 파일 크기 및 하위 디렉토리를 보여줍니다.

du -h  * 
3,1G    10/CR2 
3,4G    10



2

파일 크기를 비교하려면 경고 만하십시오. du는 파일 시스템, 블록 크기 등에 따라 다른 결과를 생성합니다.

파일 크기가 다를 수 있습니다 (예 : 로컬 하드 디스크의 동일한 디렉토리와 USB 대용량 저장 장치 비교). 디렉토리 크기를 요약하기 위해 ls를 포함하여 다음 스크립트를 사용합니다. 모든 하위 디렉토리를 고려한 바이트 단위의 결과입니다.

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"

1

현재 디렉토리의 파일 및 서브 디렉토리 크기를 재귀 적으로 표시하려면 다음을 수행하십시오.

du -h .

동일한 크기 정보 를 표시 하지만 하위 디렉토리를 재귀 적으로 인쇄 하지 않으면 (대규모 목록 일 수 있음) --max-depth 옵션을 사용하십시오 .

du -h --max-depth=1 .

1

잠시 동안, rmbash 의 명령 을 사용하는 대신 Nautilus (RHEL 6.0의 Gnome 데스크탑)를 사용하여 홈 폴더의 파일을 삭제 했습니다. 결과적으로 전체 크기는

du -sh

내가 사용할 때 각 하위 디렉토리의 디스크 사용량 합계와 일치하지 않습니다.

du -sh *

노틸러스가 삭제 된 파일을 휴지통에 전송한다는 것을 깨닫는 데 시간이 걸렸으며 해당 폴더가 du -sh *명령에 나열되지 않았습니다 . 누군가가 같은 문제에 직면했을 때를 대비하여 이것을 공유하고 싶었습니다.


1

흠, 가장 좋은 방법은 다음 명령을 사용하는 것입니다.

du -h -x / | sort -hr >> /home/log_size.txt

그런 다음 모든 서버에서 모든 크기의 폴더를 가져올 수 있습니다. 가장 큰 크기를 쉽게 찾을 수 있습니다.


1

다음은 기억하기 쉽다

ls -ltrapR

디렉토리 내용 목록

-l 긴 목록 형식을 사용하십시오.

-t 수정 시간순으로 정렬

-r,-정렬하는 동안 역순

-a, --all은로 시작하는 항목을 무시하지 않습니다.

디렉토리에 -p, --indicator-style = 슬래시 추가 / 표시기

-R,-재귀 목록 하위 디렉토리를 재귀 적으로

https://explainshell.com/explain?cmd=ls+-ltrapR


1

size디렉토리를 나열하려는 항목을 보다 세밀하게 제어 하려면 다음과 같이 threshold( -t) 스위치를 사용할 수 있습니다 .

$ du -ht 1000000000 | sort --reverse

du- dISK의 u세이지
h - 인간이 읽을 수있는 형식
t - 임계 값 크기

여기에서는 1GB보다 큰 모든 디렉토리를 나열하려고합니다.

$ du -ht 1G | sort --reverse

설명 :

위키설명 된 단위는 다음과 같습니다.

K, M, G, T, P, E, Z, Y (1024의 거듭 제곱) 또는
KB, MB, GB, TB, PB, EB, ZB, YB (1000의 거듭 제곱).


0

rsync로 미러링 한 후 두 대의 다른 서버에서 동일한 디렉토리를 비교하는 경우 Martin Wilde가 설명한 것과 비슷한 문제가 발생했습니다.

스크립트를 사용하는 대신 크기를 바이트 단위로 계산하고 두 서버의 차이점을 제거 할 수 있는 한 -b플래그를 추가했습니다 du. 여전히 -s -h이해하기 쉬운 출력을 얻는 데 사용할 수 있습니다 .


0

.bashrc와 같은 초기화 스크립트에 배치하십시오 ... 필요에 따라 def를 조정하십시오.

duh() {
  # shows disk utilization for a path and depth level
  path="${1:-$PWD}"
  level="${2:-0}"
  du "$path" -h --max-depth="$level"
}

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