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

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

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



답변

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

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)


답변

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


답변

du -sh * | sort -h

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


답변

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

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

읽기가 더 편리합니다. 🙂


답변

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


답변

원하는 명령은 ‘du -sk’du = “디스크 사용량”입니다.

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

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


답변

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

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.