source

각 파일 및 디렉토리의 크기를 나열하고 Bash에서 내림차순으로 정렬하려면 어떻게 해야 합니까?

manycodes 2023. 4. 11. 22:13
반응형

각 파일 및 디렉토리의 크기를 나열하고 Bash에서 내림차순으로 정렬하려면 어떻게 해야 합니까?

Bash에서는 디렉토리 크기를 쉽게 구할 수 없다는 것을 알았습니다.

는 그걸 입력했을 때 요.ls -<some options>디렉토리 파일사이즈의 모든 합계를 재귀적으로 리스트 할 수 있습니다.또, 파일도 사이즈순으로 정렬할 수 있습니다.

그게 가능한가요?

디렉토리로 이동하여 다음 명령을 실행합니다.

du -a --max-depth=1 | sort -n

또는 사람이 읽을 수 있는 크기의 경우 -h를 추가하고 큰 디렉토리/파일을 먼저 인쇄하려면 -r을 추가합니다.

du -a -h --max-depth=1 | sort -hr

★★★★★★★★★★★★★★.--max-depthX 버전의 X에는 옵션이 .du명령어를 입력합니다.대신 다음을 사용할 수 있습니다.

du -h -d 1 | sort -n

du -s -- * | sort -n

(숨김(.dotfiles) 파일은 표시되지 않습니다.)

du -sm(Mb 단위 등)나는 항상 사용한다

du -smc -- * | sort -n

총 회선(-c는 명백한 로 맨 .

PS:

  • 닷 파일 처리에 대한 설명 참조
  • 예를 들어 'du - smc / home // | sort - n | tail'을 자주 사용하여 큰 비트가 정확히 어디에 위치하는지 파악합니다.

명령어

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"이 읽을 수 있는" (가지 위한 이다.인간이 읽을 수 있는 것"을 위한 것이다(현물과 du 모두).
  • max-depth=0「」를 의미합니다.du서브폴더의 사이즈는 표시되지 않습니다(모든 서브, 서브, 서브, ..., 폴더의 모든 파일의 모든 사이즈를 표시하는 경우는, 삭제해 주세요).
  • r ( first "first" (file first) " (first)

ncdu

이 질문을 받았을 때, 저는 제 파일 시스템을 정리하고 싶었습니다. 도구 " " "ncdu이 작업에 훨씬 더 적합합니다.

Ubuntu에서의 설치:

$ sudo apt-get install ncdu

사용방법:

냥냥 just just just just라고 치면 돼요.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

에서 현재 강조 표시된 요소를 삭제하고 + 를 눌러 종료합니다.

ls -S하기 위해 크기를 표시해야 합니다.ls -lS하다-l )에 따라 -S를 표시합니다).가 표시됩니다.는 보통 는는보보보보보보추추 i i를 붙입니다.-h 쉽게 하기 , '읽기 쉽게', '읽기 쉽게', '읽기 쉽게', '읽기 쉽게', '읽기 쉽게'ls -lhS.

심플하고 고속:

find . -mindepth 1 -maxdepth 1 -type d | parallel du -s | sort -n

* GNU 병렬이 필요합니다.

네가 뭘 하고 싶은지 알 것 같아그러면 모든 파일과 디렉토리의 파일 크기 및 내용 크기별로 정렬된 목록이 표시됩니다.

(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는, 를 「Line Feed」로 을 실시하고 있습니다.+(웃음) ★★★★★★★★★★★★☆sed에는 마지막을 .+하지 않도록 합니다.bc(기본 계산기) 명령을 사용하여 평소처럼 계산을 수행합니다.

퍼포먼스:몇 개의 디렉토리와 최대 150,000개 이상의 파일(현재 페도라 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인용에 ) (man)의 정확한 를 알 경우 du에 파일 영역의 사용 상황을 나타냅니다.따라서 잘못된 결과, 근사치(합계에 가까울 수 있지만 찾는 실제 크기보다 클 수 있음)가 나타납니다.

당신의 질문에 대답할 수 있는 다른 방법이 있을 것 같지만, 이것은 제 것입니다.

ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc

의 모든 로 변경)이 를 사용).디렉토리의 모든 파일(원하는 디렉토리를 사용하여 .를 변경), 숨김 파일도 포함되어 있습니다.xargs후, using using using using using using using using using using using using using using using using using using using 를 사용하여 상세 목록을 작성합니다.ls -l이 ( 명령어와 필드(. " (. ") "cut " 5" "cut" )에만-f5 단위)가 (바이트 단위)에 파이핑됩니다xargs빈칸으로 구분된 한 줄의 크기를 다시 생성합니다. 각 을 플러스하는 sed 하세요.+에 서명하고 으로 )을 클릭합니다.bc을 사용하다

좀 더 할 수도 있고, '조율'이 있을 수도 있어요.또한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 | sort -hr | more 또는 du -h --max-depth=0 * | sort -hr | more 순으로 나열할 수 있습니다.

나는 du를 간단한 방법으로 사용하는 경향이 있다.

du -sh */ | sort -n

이것에 의해, 어느 디렉토리가 공간을 가장 많이 소비하고 있는지를 알 수 있습니다.그러면 나중에 더 정확한 검색을 실행할 수 있습니다.

sudo du -hsx 2>/dev/null * | sort -hr | less

4.9G    var
2.2G    usr
61M     root
9.0M    etc
6.5M    home
824K    init
36K     run
16K     lost+found
4.0K    tmp
4.0K    srv
4.0K    opt
4.0K    mnt
4.0K    media
4.0K    boot
0       sys
0       sbin
0       proc
0       libx32
0       lib64
0       lib32
0       lib
0       dev
0       bin
(END)

언급URL : https://stackoverflow.com/questions/7463554/how-to-list-the-size-of-each-file-and-directory-and-sort-by-descending-size-in-b

반응형