모든 파일을 크거나 작은 순서로 나열하고 파일이 특정 폴더의 어느 곳에 나 존재할 수 있습니다.
man ls
:-S sort by file size
모든 파일을 크거나 작은 순서로 나열하고 파일이 특정 폴더의 어느 곳에 나 존재할 수 있습니다.
man ls
:-S sort by file size
답변:
단순히 다음과 같은 것을 사용하십시오 :
ls -lS /path/to/folder/
자본 S .
파일을 크기별로 정렬합니다.
참조 :
-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 -k
및 sort -rn
. 참고 크기 및 디스크 사용량은 같은 것이 아니다.
du
파일 크기와 다른 디스크 사용량을 제공합니다. (GNU)를 사용하면 du -h
숫자 정렬이 작동하지 않습니다 ( -h
정렬하려면 GNU 옵션 이 필요합니다 ). xargs는 따옴표로 묶인 단어 목록을 입력으로 예상하므로 파일 이름에 공백이나 따옴표가 포함 된 경우 작동하지 않습니다.
find . -type f -print0 | xargs -0 du -h | sort -rh
. 가장 큰 30 개의 파일을 말하고 싶은 경우 : find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
.
+ |
구문을 설명해 주 + | sort -r -h
시겠습니까?
찾기 및 정렬과 같은 것을 사용할 수 있습니다.
find . -type f -ls | sort -r -n -k7
( -ls
옵션은 표준은 아니지만 GNU뿐만 아니라 많은 검색 구현에서 찾을 수 있습니다. GNU find 및 기타에서는 ls -li
ACL이있는 파일에 +가 표시되지 않는 등 몇 가지 예외가 있지만 비슷한 것을 표시합니다)
파일 이름에 개행 문자가 포함될 수있는 경우 GNU find 및 GNU 정렬을 사용하십시오.
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
zsh 및 GNU ls를 사용하는 경우 :
ls -ldU -- **/*(.OL)
어디 (.OL)
A는 글로브 규정은 , .
선택 규칙 , 파일 만 OL
(파일 크기 길이 순서를 반대로 o
, 오름차순위한 O
내림차순).
(이전 버전의 zsh에는 파일 크기가 2 ^ 32보다 큰 문제가있었습니다).
일부 운영 체제에는 명령에 전달 된 인수 목록의 크기에 제한이 있습니다. 이 경우 다음이 필요합니다.
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
자세한 출력이 아닌 파일 목록 만 원한다면 다음을 수행하십시오.
print -rl -- **/*(.OL)
숨겨진 파일 ( .
및 점을 제외 하고 점으로 시작하는 ..
)을 포함하고 숨겨진 디렉토리에서도 검색하려면 D
globbing 한정자를 추가하십시오 .
print -rl -- **/*(.DOL)
.OL
합니까? 그 명령의 일부입니까?
ls (GNU coreutils) 8.25
및 사용 하고 zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
있습니다. 그것은 특정 버전에서만 작동합니까 ls
와 zsh
?
크기 오름차순으로 파일을 나열하면 다음과 같습니다.
ls -lSr
옵션은 다음과 같습니다.
"파일이 특정 폴더의 어느 곳에 나있을 수있다"는 말은 시작 디렉토리 (폴더) 내의 모든 디렉토리 (폴더)를 재귀 적으로 내림차순으로한다는 것을 의미합니다. 이것이 find
해야 할 일입니다.
find . -type f -exec ls -lSd {} +
현재 작업 디렉토리 ( ) 의 모든 파일 을 "찾습니다" .
. 발견 된 각 파일에 대해 ls
크기 순서로 찾은 오브젝트를 정렬 하는 프로세스가 실행됩니다. +
받는 종료 -exec
원인 여러 인수에리스트로 전달한다 ls
. 디렉토리 (폴더)에 매우 많은 수의 파일이 포함되어 있지 않은 경우 하나의 목록 (따라서 하나의 프로세스가 포크 됨)이 있어야 원하는 결과를 얻을 수 있습니다.
이것들을보십시오, 그것은 나에게 잘 작동합니다.
$ 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
sed
출력을 자르는 데 사용 합니다
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 도 참조 하십시오 .
서브 디렉토리에서 파일의 누적 크기를 보려면 원래 질문의 변형으로 다음을 수행하십시오.
#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
크기는 메가 바이트 ( m
in 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 / debianapt install ncdu
) 및 osx (brew install ncdu
)에서 사용할 수 있습니다.