크기별로 정렬 된 모든 파일을 나열하는 방법


241

모든 파일을 크거나 작은 순서로 나열하고 파일이 특정 폴더의 어느 곳에 나 존재할 수 있습니다.



5
에서 man ls:-S sort by file size
ctrl-alt-delor

“파일이이 디렉토리에 있습니다”또는“파일이 임의의 하위 디렉토리에있을 수 있습니다”를 의미합니까?
ctrl-alt-delor

GUI 도구를 사용할 수 있거나 사용하려면 QDirStat (이전의 KDirStat)를 살펴 보십시오 .
RhinoDevel

답변:


290

단순히 다음과 같은 것을 사용하십시오 :

ls -lS /path/to/folder/

자본 S .

파일을 크기별로 정렬합니다.

참조 :

man ls

-S     sort by file size

역순 으로 정렬하려면 -r스위치를 추가하십시오 .

최신 정보:

디렉토리를 제외 시키려면 (파일 이름 또는 심볼릭 링크 대상에 개행 문자가 포함되어 있지 않은 경우) :

ls -lS | grep -v '^d' 

업데이트 2 :

이제 여전히 폴더가 될 수있는 심볼릭 링크가 어떻게 표시되는지 확인합니다. 심볼릭 링크는 항상 링크에서와 같이 문자 l로 시작합니다.

를 필터링하도록 명령을 변경하십시오 -. 일반 파일 만 남겨 두어야합니다.

ls -lS | grep '^-'

내 시스템에서는 일반 파일 만 표시됩니다.

업데이트 3 :

재귀를 추가하기 위해 sort명령 행을 정렬하고 5 번째 열을 사용하여 정렬하도록 명령합니다.

ls -lR | grep '^-' | sort -k 5 -rn

-rn가장 큰 파일을 맨 위에 가져 오려면 Reverse 및 numeric을 의미합니다. 이 명령의 단점은 파일의 전체 경로를 표시하지 않는다는 것입니다.

파일의 전체 경로가 필요한 경우 다음과 같이 사용하십시오.

find . -type f  -exec du -h {} + | sort -r -h

find명령은 모든 하위 디렉토리에서 모든 파일을 재귀 적으로 찾아서 .호출 du -h( 디스크 사용 -humanreadable ) 한 다음 출력을 다시 정렬합니다. 귀하의 경우 find/는 sort지원하지 않습니다 -h, 교체 du -ksort -rn. 참고 크기디스크 사용량은 같은 것이 아니다.


5
du파일 크기와 다른 디스크 사용량을 제공합니다. (GNU)를 사용하면 du -h숫자 정렬이 작동하지 않습니다 ( -h정렬하려면 GNU 옵션 이 필요합니다 ). xargs는 따옴표로 묶인 단어 목록을 입력으로 예상하므로 파일 이름에 공백이나 따옴표가 포함 된 경우 작동하지 않습니다.
Stéphane Chazelas

1
-S는 내림차순으로 오름차순은 어떻습니까?
demongolem

3
@ StéphaneChazelas에 따르면, 이것은 나를 위해 작동합니다 : find . -type f -print0 | xargs -0 du -h | sort -rh. 가장 큰 30 개의 파일을 말하고 싶은 경우 : find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30.
user7543

안녕하세요! 의 + |구문을 설명해 주 + | sort -r -h시겠습니까?
빅터


25

찾기 및 정렬과 같은 것을 사용할 수 있습니다.

find . -type f -ls | sort -r -n -k7

( -ls옵션은 표준은 아니지만 GNU뿐만 아니라 많은 검색 구현에서 찾을 수 있습니다. GNU find 및 기타에서는 ls -liACL이있는 파일에 +가 표시되지 않는 등 몇 가지 예외가 있지만 비슷한 것을 표시합니다)

파일 이름에 개행 문자가 포함될 수있는 경우 GNU find 및 GNU 정렬을 사용하십시오.

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'

이것은 공백을 포함하지 않는 (-ls의) "group"열 (따라서 -k 7 매개 변수)을 가정하지만 반드시 그런 것은 아닙니다.
kolistivra

1
왜 단순히 찾기를하지 않는가 ... -print0 | -zk7rn0 정렬?
Andre de Miranda

10

zsh 및 GNU ls를 사용하는 경우 :

ls -ldU -- **/*(.OL)

어디 (.OL)A는 글로브 규정은 , .선택 규칙 , 파일 만 OL(파일 크기 길이 순서를 반대로 o , 오름차순위한 O내림차순).

(이전 버전의 zsh에는 파일 크기가 2 ^ 32보다 큰 문제가있었습니다).

일부 운영 체제에는 명령에 전달 된 인수 목록의 크기에 제한이 있습니다. 이 경우 다음이 필요합니다.

autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU

자세한 출력이 아닌 파일 목록 만 원한다면 다음을 수행하십시오.

print -rl -- **/*(.OL)

숨겨진 파일 ( .및 점을 제외 하고 점으로 시작하는 ..)을 포함하고 숨겨진 디렉토리에서도 검색하려면 Dglobbing 한정자를 추가하십시오 .

print -rl -- **/*(.DOL)

무엇을 .OL합니까? 그 명령의 일부입니까?
alpha_989

@ alpha_989, 편집 참조
Stéphane Chazelas

설명해 주셔서 감사합니다. Stephane .. 그러나 어떤 이유로 .. 명령이 내 워크 스테이션에서 작동하지 않습니다.. ls (GNU coreutils) 8.25및 사용 하고 zsh 5.1.1 (x86_64-ubuntu-linux-gnu)있습니다. 그것은 특정 버전에서만 작동합니까 lszsh?
alpha_989

@ alpha_989, 어떤 방법으로 당신을 위해 작동하지 않습니까? 그것은 동일한 버전으로 저에게 효과적이며 적어도 15 년 전 버전에서는 작동하지 않았던 코드에는 아무것도 없습니다.
Stéphane Chazelas

9

크기 오름차순으로 파일을 나열하면 다음과 같습니다.

ls -lSr

옵션은 다음과 같습니다.

  • l : 길고 자세한 사용자, 그룹, 기타 속성, 날짜 등을 표시합니다.
  • S : 크기별 주문 목록 (기본적으로 내림차순)
  • r : 리스팅 순서를 반대로

답변의 품질을 향상시키는 옵션을 설명해 주시겠습니까?
Rui F Ribeiro

6

"파일이 특정 폴더의 어느 곳에 나있을 수있다"는 말은 시작 디렉토리 (폴더) 내의 모든 디렉토리 (폴더)를 재귀 적으로 내림차순으로한다는 것을 의미합니다. 이것이 find해야 할 일입니다.

find . -type f -exec ls -lSd {} +

현재 작업 디렉토리 ( ) 의 모든 파일 을 "찾습니다" .. 발견 된 각 파일에 대해 ls크기 순서로 찾은 오브젝트를 정렬 하는 프로세스가 실행됩니다. +받는 종료 -exec원인 여러 인수에리스트로 전달한다 ls. 디렉토리 (폴더)에 매우 많은 수의 파일이 포함되어 있지 않은 경우 하나의 목록 (따라서 하나의 프로세스가 포크 됨)이 있어야 원하는 결과를 얻을 수 있습니다.


1
ls에서 -h 수정자를 사용하여 멋진 파일 크기를 표시 할 수 있기 때문에
유용

4

파일 목록이 역순으로 표시됩니다. ls -lSrh

오름차순 : ls -lSh


1
인간 친화적 인 출력에 -h 플래그를 사용하는 경우 +1
컴퓨팅

2

나는 얼마 전까지이 정도로 무언가를 썼다. 나열 할 파일 수를 지정하는 인수를 전달하거나을 입력 big하면 10이됩니다.

big () { 
    NUM_FILES=10;
    if [ $1 ]; then
        NUM_FILES=$1;
    fi;
    du | sort -nr | head -n $NUM_FILES
}

2

이것들을보십시오, 그것은 나에게 잘 작동합니다.

$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10

# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'

완벽한 답변은 아니지만 어느 정도 작동합니다.

$ ls -lS |grep  '^-' | head -n 6 

1
파일 이름에 공백이 없으면 awk가 제대로 작동합니다.
Eir Nym

예 .. 'sed'를 사용하고 공백을 밑줄로 바꿉니 까? 도움이된다면
Sand1512

아니요, sed출력을 자르는 데 사용 합니다
Eir Nym

1

delh의 답변과 Stéphane Chazelas의 의견에 추가 ...

find -print0와 결합하여 xargs -0공백 / 공백 / 무엇을 지원합니다.

du -h | sort -rn 다른 바이트 배수 사이에서 올바르게 정렬되지 않습니다. 예를 들어 1.1K는 128K 이후에 표시됩니다.

sort -rh (--human-numeric-sort)는 그것을 처리하지만 GNU 버전에서만 작동합니다.

아래 명령은 원하는 출력을 제공합니다.

사람이 읽을 수있는 GNU의 종류 / 리눅스 :

find . -type f -print0 | xargs -0 du -h | sort -rh

킬로바이트 단위, BSD / OSX / 기타 :

find . -type f -print0 | xargs -0 du -k | sort -rn

BSD / OSX의 경우 https://unix.stackexchange.com/a/188375/82895 도 참조 하십시오 .


1

서브 디렉토리에서 파일의 누적 크기를 보려면 원래 질문의 변형으로 다음을 수행하십시오.

#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr

크기는 메가 바이트 ( min du -sm) 로 표시됩니다 . 허용되는 다른 값 du-k킬로바이트, -g기가 바이트입니다. -h사람이 읽을 수있는 디스플레이를 사용하면 정렬이 중단되므로 사용할 수 없습니다.

다음은 메가 바이트 sed를 추가 하는 데 사용되는 버전입니다 M.

find ${1:-.} -maxdepth 1  -type d  -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'

표시 할 디렉토리는 ${1:-.}제공된 경우 첫 번째 명령 행 인수를 사용하거나 인수없이 호출 된 경우 현재 디렉토리를 사용하도록 설정됩니다.

참고 : 많은 파일이 있으면 시간이 오래 걸릴 수 있습니다. 이 옵션 -type d은 하위 폴더 만 나열하고 현재 폴더의 파일을 제외합니다. 현재 폴더의 파일도 보려면 제거하십시오.

참고 : ncdu대신 대부분의 Linux repos (ubuntu / debian apt install ncdu) 및 osx ( brew install ncdu)에서 사용할 수 있습니다.

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