ls를 사용하여 디렉토리 및 전체 크기 나열
ls
유닉스에서 하위 디렉토리의 전체 크기와 모든 내용을 나열하는 것이 가능 합니까? IE
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 = "disk usage"입니다.
-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
과에 대한 모든 옵션 du
이 ls
혼동 것없는 ls
(두 유틸리티에 존재하며 옵션은 동일한 것을 의미하지 않을 수 있습니다, 그것은 꽤 엉망이 될 것입니다).
는 cut
이후 du
단순히의 첫 번째 열에 잘라내 du -hs
출력 (크기)를.
du
출력을 왼쪽에 배치하기로 결정했습니다 . 그렇지 않으면 흔들리는 오른쪽 열을 관리해야했을 것입니다 (파일 이름 길이가 다양하기 때문).
이 명령은 명령 줄 플래그를 허용하지 않습니다.
이것은 bash
및에서 테스트되었습니다 ksh93
. 에서는 작동하지 않습니다 /bin/sh
.
나는 항상 du -sk
( -k
킬로바이트 단위로 파일 크기를 표시하는 플래그)를 대신 사용합니다.
du -h --max-depth=1 . | sort -n -r
du -sch * 같은 디렉토리에 있습니다.
이것은 내가 좋아하는 것입니다
업데이트 : 이전 디렉토리는 현재 디렉토리에 파일을 표시하지 않고 디렉토리 만 나열했기 때문에 마음에 들지 않았습니다.
/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
ncdu
ncurses du
이 멋진 CLI 유틸리티를 사용하면 대화식으로 큰 파일과 디렉토리를 쉽게 찾을 수 있습니다.
예를 들어 잘 알려진 프로젝트 의 트리 내부에서 다음을 수행합니다.
sudo apt-get install ncdu
ncdu
그 결과 :
그런 다음 키보드에서 오른쪽 아래로 들어가 /drivers
폴더 로 이동하면 다음이 표시됩니다.
ncdu
전체 트리에 대해 시작할 때 한 번만 파일 크기를 재귀 적으로 계산하므로 효율적입니다.
"총 디스크 사용량"대 "명백한 크기"는 du
에서와 유사합니다 . 여기서 설명했습니다. 'du'의 출력이 종종 'du -b'와 다른 이유
프로젝트 홈페이지 : https://dev.yorhel.nl/ncdu
관련 질문 :
- https://unix.stackexchange.com/questions/67806/how-to-recursively-find-the-amount-stored-in-directory/67808
- https://unix.stackexchange.com/questions/125429/tracking-down-where-disk-space-has-gone-on-linux
- https://askubuntu.com/questions/57603/how-to-list-recursive-file-sizes-of-files-and-directories-in-a-directory
- https://serverfault.com/questions/43296/how-does-one-find-which-files-are-taking-up-80-of-the-space-on-a-linux-webserve
Ubuntu 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"
},
Ubuntu 18.04에서 테스트되었습니다.
look at du
command for that
These are all great suggestions, but the one I use is:
du -ksh * | sort -n -r
-ksh
makes sure the files and folders are listed in a human-readable format and in megabytes, kilobytes, etc. Then you sort them numerically and reverse the sort so it puts the bigger ones first.
The only downside to this command is that the computer does not know that Gigabyte is bigger than Megabyte so it will only sort by numbers and you will often find listings like this:
120K
12M
4G
Just be careful to look at the unit.
This command also works on the Mac (whereas sort -h
does not for example).
du -S
du have another useful option: -S, --separate-dirs
telling du not include size of subdirectories - handy on some occasions.
Example 1 - shows only the file sizes in a directory:
du -Sh *
3,1G 10/CR2
280M 10
Example 2 - shows the file sizes and subdirectories in directory:
du -h *
3,1G 10/CR2
3,4G 10
du -sm * | sort -nr
Output by size
just a warning, if you want to compare sizes of files. du produces different results depending on file system, block size, ... .
It may happen that the size of the files is different, e.g. comparing the same directory on your local hard-disk and a USB mass storage device. I use the following script, including ls to sum up the directory size. The result in in bytes taking all sub directories into account.
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"
To display current directory's files and subdirectories sizes recursively:
du -h .
To display the same size information but without printing their sub directories recursively (which can be a huge list), just use the --max-depth option:
du -h --max-depth=1 .
For a while, I used Nautilus (on Gnome desktop on RHEL 6.0) to delete files on my home folder instead of using the rm
command in bash. As a result, the total size shown by
du -sh
did not match the sum of disk usage of each sub-directory, when I used
du -sh *
It took me a while to realise Nautilus sends the deleted files to its Trash folder, and that folder is not listed in du -sh *
command. So, just wanted to share this, in case somebody faced the same problem.
Hmm, best way is to use this command:
du -h -x / | sort -hr >> /home/log_size.txt
Then you will be able to get all sizes folders over all your server. Easy to help to you to find the biggest sizes.
I ran into an issue similar to what Martin Wilde described, in my case comparing the same directory on two different servers after mirroring with rsync.
Instead of using a script I added the -b
flag to the du
which counts the size in bytes and as far as I can determine eliminated the differences on the two servers. You still can use -s -h
to get a comprehensible output.
The following is easy to remember
ls -ltrapR
list directory contents
-l use a long listing format
-t sort by modification time, newest first
-r, --reverse reverse order while sorting
-a, --all do not ignore entries starting with .
-p, --indicator-style=slash append / indicator to directories
-R, --recursive list subdirectories recursively
https://explainshell.com/explain?cmd=ls+-ltrapR
place in init script like .bashrc ... adjust def as needed.
duh() {
# shows disk utilization for a path and depth level
path="${1:-$PWD}"
level="${2:-0}"
du "$path" -h --max-depth="$level"
}
If you want more control over the size
that you want to list the directories over, you can use the threshold
(-t
) switch as in:
$ du -ht 1000000000 | sort --reverse
du
- d
ISK의 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의 거듭 제곱).
"ls -ltrh / path_to_directory"를 입력합니다.
참고 URL : https://stackoverflow.com/questions/1019116/using-ls-to-list-directories-and-their-total-sizes
'development' 카테고리의 다른 글
사용자가 다운로드 할 수 있도록 메모리에 파일을 생성하는 방법은 무엇입니까? (0) | 2020.09.29 |
---|---|
JavaScript에서 DOM 노드의 모든 자식 요소 제거 (0) | 2020.09.29 |
Java의 데몬 스레드는 무엇입니까? (0) | 2020.09.29 |
git 브랜치의 태그를 다른 커밋으로 이동하려면 어떻게해야합니까? (0) | 2020.09.29 |
본문이 브라우저 높이의 100 %가되도록합니다. (0) | 2020.09.29 |