Bash에서 각 파일과 디렉토리의 크기를 (재귀 적으로) 어느 정도 정렬해야합니까?
Bash에서 디렉토리 크기를 쉽게 구할 수 있습니다.
를 입력 ls -<some options>
하면 디렉토리의 파일 크기와 파일의 모든 설치를 그리고 크기 순서로 정렬 할 수 있습니다.
할 수 있습니까?
디렉토리로 이동하여 다음 명령을 실행하십시오.
du -a --max-depth=1 | sort -n
또는 사람이 읽을 수있는 크기의 경우 -h를 추가하고 더 큰 디렉토리 / 파일을 먼저 인쇄하십시오.
du -a -h --max-depth=1 | sort -hr
du -s -- * | sort -n
(숨겨진 (.dotfiles) 파일은 표시되지 않음)
du -sm
Mb 단위 사용 사용 합니다. 항상 사용합니다.
du -smc -- * | sort -n
-c
분명한 이유 때문에 전체 줄 ( )이 맨 아래에 있기 때문입니다. :)
추신 :
- dotfile 처리에 대한 주석보기
- 나는 자주 예를 들어 'du -smc / home / / | 정렬 -n | tail '을 사용하여 큰 비트가 어디에 있는지 알 수 있습니다.
분명히 --max-depth
옵션은 Mac OS X 버전의 du
명령 이 아닙니다 . 대신 다음을 사용할 수 있습니다.
du -h -d 1 | sort -n
명령
du -h --max-depth=0 * | sort -hr
많이
3,5M asdf.6000.gz
3,4M asdf.4000.gz
3,2M asdf.2000.gz
2,5M xyz.PT.gz
136K xyz.6000.gz
116K xyz.6000p.gz
88K test.4000.gz
76K test.4000p.gz
44K test.2000.gz
8,0K desc.common.tcl
8,0K wer.2000p.gz
8,0K wer.2000.gz
4,0K ttree.3
설명
du
"저장할"을 표시합니다.h
"사람이 읽을 수있는"(정렬 및 뒤 둘 다)max-depth=0
du
폴더의 크기 하위를-display하지 않음을 의미합니다 (모든 하위, 하위 하위, ..., 폴더에있는 모든 파일의 모든 크기 를 표시하려면 제거 )r
"역방향"(가장 큰 파일 먼저)
ncdu
이 질문에 대해 파일 시스템을 정리하고 싶었습니다. 명령 줄 도구 ncdu
가이 작업에 더 적합합니다.
Ubuntu에 설치 :
$ sudo apt-get install ncdu
용법 :
ncdu [path]
명령 줄에 입력하기 만하면 됩니다. 경로를 분석하는 데 몇 초 후에 다음과 같은 내용이 표시됩니다.
$ ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
--- / ---------------------------------------------------------
. 96,1 GiB [##########] /home
. 17,7 GiB [# ] /usr
. 4,5 GiB [ ] /var
1,1 GiB [ ] /lib
732,1 MiB [ ] /opt
. 275,6 MiB [ ] /boot
198,0 MiB [ ] /storage
. 153,5 MiB [ ] /run
. 16,6 MiB [ ] /etc
13,5 MiB [ ] /bin
11,3 MiB [ ] /sbin
. 8,8 MiB [ ] /tmp
. 2,2 MiB [ ] /dev
! 16,0 KiB [ ] /lost+found
8,0 KiB [ ] /media
8,0 KiB [ ] /snap
4,0 KiB [ ] /lib64
e 4,0 KiB [ ] /srv
! 4,0 KiB [ ] /root
e 4,0 KiB [ ] /mnt
e 4,0 KiB [ ] /cdrom
. 0,0 B [ ] /proc
. 0,0 B [ ] /sys
@ 0,0 B [ ] initrd.img.old
@ 0,0 B [ ] initrd.img
@ 0,0 B [ ] vmlinuz.old
@ 0,0 B [ ] vmlinuz
로 현재 강조하는 요소를 삭제하고 +로 d종료합니다.CTRLc
ls -S
크기별로 정렬됩니다. 그런 다음 크기도 표시하기 위해 크기 ls -lS
( -l
)별로 -S
표시되는 긴 ( ) 표시를 제공합니다. 나는 일반적으로 -h
내용을 더 쉽게 읽을 수 있도록 추가 하기 때문에 ls -lhS
.
간단하고 빠름 :
find . -mindepth 1 -maxdepth 1 -type d | parallel du -s | sort -n
* GNU Parallel이 필요 합니다 .
당신이 뭘하고 싶은지 알아 낸 것 같아요. 이 모든 파일과 디렉토리의 정렬 된 목록을 제공하며, 파일 크기와 디렉토리 내용의 크기별로 정렬됩니다.
(find . -depth 1 -type f -exec ls -s {} \;; find . -depth 1 -type d -exec du -s {} \;) | sort -n
[향상된 버전] 아래
의 초기 버전 보다 훨씬 빠르고 정확하며 현재 디렉토리의 모든 파일 크기의 합계를 출력합니다.
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
stat -c %s
파일에 대한 명령은 크기를 바이트 단위로 반환합니다. tr
여기에 있는 명령은 xargs
명령 제한 을 극복하는 데 사용됩니다 (명백하게 파이핑 xargs
은 결과를 더 많은 행으로 분할하여 명령의 논리를 깨는 것입니다). 따라서 tr
줄 바꿈을 +
(더하기) 기호 로 바꾸는 작업을 처리 합니다. 평소와 같이 계산 을 수행하는 최종 (기본 계산기) 명령의 불평을 피하기 위해 결과 문자열에서 sed
마지막 +
기호 를 제거하는 유일한 목표가 bc
있습니다.
성능 : 여러 디렉토리에서 테스트했으며 150.000 개 이상의 파일 상단 (내 fedora 15 상자의 현재 파일 수)에서 놀라운 결과를 얻었습니다.
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
du -sb /
명령 과 비교하려는 경우 예상 디스크 사용량을 바이트 단위로 출력합니다 ( -b
옵션).
# du -sb /
12684646920 /
예상했던대로 du
유틸리티가 실제 사용 된 공간이 아닌 각 파일의 할당 된 공간을 반환 하기 때문에 내 명령 계산보다 약간 큽니다 .
[초기 버전] (맨 페이지 인용에 따라) 파일 공간 사용량을 추정 하기 때문에 폴더의 정확한 합계 크기를 알아야하는 경우 명령을
사용할 수 없습니다 . 따라서 잘못된 결과, 근사치 (합계 크기에 가까울 수 있지만 찾고있는 실제 크기보다 클 가능성이 높음)로 연결됩니다.du
du
귀하의 질문에 답변하는 방법이 다를 수 있다고 생각하지만 이것은 내 것입니다.
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
아래의 모든 파일을 찾습니다. 디렉토리 (원하는 디렉토리로. 변경), 숨겨진 파일도 포함되며 (사용 xargs
) 한 줄에 이름을 출력 한 다음 ls -l
. 이 (때때로) 거대한 출력은 cut 명령으로 파이프되고 다섯 번째 필드 ( -f5
) ( 바이트 단위의 파일 크기) 만 가져 와서 다시 파이프 xargs
되어 공백으로 구분 된 한 줄의 크기를 생성합니다. 이제 각 빈 공간을 더하기 ( +
) 기호로 바꾸고 마지막으로 bc
(기본 계산기) 수학을 수행하는 sed 마법이 발생합니다 .
추가 조정이 필요할 수 있으며 ls
너무 긴 인수 목록에 대해 불평하는 명령 이있을 수 있습니다 .
또 다른 간단한 해결책.
$ for entry in $(ls); do du -s "$entry"; done | sort -n
결과는 다음과 같습니다.
2900 tmp
6781 boot
8428 bin
24932 lib64
34436 sbin
90084 var
106676 etc
125216 lib
3313136 usr
4828700 opt
"du -s"를 "du -sh"로 변경하면 사람이 읽을 수있는 크기가 표시되지만이 방법에서는 정렬 할 수 없습니다.
아래를 사용하여 파일을 크기별로 나열 할 수 있습니다. du -h | 정렬 -hr | more 또는 du -h --max-depth = 0 * | 정렬 -hr | 더
저는 du를 간단한 방법으로 사용하는 경향이 있습니다.
du -sh */ | sort -n
이것은 어떤 디렉토리가 가장 많은 공간을 소비하는지에 대한 아이디어를 제공합니다. 그런 다음 나중에 더 정확한 검색을 실행할 수 있습니다.
'IT' 카테고리의 다른 글
PHP의 배열에서 쉼표로 구분 된 목록을 어떻게 생성합니까? (0) | 2020.08.14 |
---|---|
C ++ 용 온라인 이름 demangler가 있습니까? (0) | 2020.08.14 |
Ref, Var, Agent, Atom의 Clojure 차이점 (예제 포함) (0) | 2020.08.14 |
Swashbuckle을 사용하여 WebAPI의 Swagger 문서에서 메서드를 생략하는 방법 (0) | 2020.08.14 |
Docker 실행을 통해 셸 펼쳐보기에 인수를 전달하는 방법 (0) | 2020.08.14 |