it-swarm-ko.tech

크기에 따라 파일을 재귀 적으로 정렬

폴더에서 가장 큰 파일을 찾아야합니다.
폴더를 재귀 적으로 스캔하고 내용을 크기별로 정렬하려면 어떻게합니까?

ls -R -S이지만 디렉토리도 나열됩니다.
또한 find를 사용해 보았습니다.

86
user2179293

현재 디렉토리와 하위 디렉토리에서 모든 파일을 찾고 경로를 고려하지 않고 크기에 따라 나열하고 GNU = find, 이렇게 할 수 있습니다 :

find . -type f -printf "%s\t%p\n" | sort -n

GNU 시스템의 man find에서 :

   -printf format
          True; print format  on  the  standard  output,
          interpreting  `\'  escapes and `%' directives.
          Field widths and precisions can  be  specified
          as  with the `printf' C function.  Please note
          that many of the  fields  are  printed  as  %s
          rather  than  %d, and this may mean that flags
          don't work as you  might  expect.   This  also
          means  that  the `-' flag does work (it forces
          fields to be  left-aligned).   Unlike  -print,
          -printf  does  not add a newline at the end of
          the string.  The escapes and directives are:

          %p     File's name.
          %s     File's size in bytes.

man sort에서 :

   -n, --numeric-sort
          compare according to string numerical value
24
terdon

다음 명령을 시도하십시오 :

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

현재 디렉토리에서 상위 20 개의 가장 큰 파일을 재귀 적으로 나열합니다.

참고 : OSX/BSD에서는 sort에 대한 -h 옵션을 사용할 수 없으므로 sort에서 coreutils를 설치해야합니다 (예 : brew) PATH에 로컬 빈 경로를 적용합니다. 예 :.

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

또는 다음을 사용하십시오.

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

가장 큰 디렉토리의 경우 du를 사용하십시오.

du -ah . | sort -rh | head -20

또는:

du -a . | sort -rn | head -20
11
kenorb

그러면 모든 파일이 재귀 적으로 검색되고 크기별로 정렬됩니다. 모든 파일 크기를 kb 단위로 인쇄하고 반올림하여 0KB 파일을 볼 수 있지만 내 용도로는 충분히 가까웠으며 OSX에서 작동합니다.

find . -type f -print0 | xargs -0 ls -la | awk '{print int($5/1000) " KB\t" $9}' | sort -n -r -k1

7
Brad Parks

zsh를 사용하면 다음과 같이 가장 큰 파일을 찾을 수 있습니다 (ls -l 출력의 크기 열과 같은 겉보기 크기 측면에서) :

ls -ld -- **/*(DOL[1])

가장 큰 6 가지 :

ls -ld -- **/*(DOL[1,6])

파일 크기별로 정렬하려면 ls-S 옵션을 사용하십시오. 일부 ls 구현에는 목록을 정렬하지 않는 ls에 대한 -U 옵션도 있습니다 (여기서 이미 크기별로 zsh로 정렬되어 있으므로).

5
Stéphane Chazelas

디렉토리를 건너 뛰는 Mac/Linux 용 간단한 솔루션 :

find . -type f -exec du -h {} \; | sort -h
4
mprcela

BSD 또는 OSX의 해당 항목은

$ du -ah simpl | sort -dr | head -6
2
hanxue

정렬 옵션으로 아래 명령을 사용하여 크기가 폴더를 오름차순으로 만드십시오.

du -sh * | sort -sh

1
Dhaval H. Nena

이것은 여러 가지 이유로 엄청나게 일반적인 요구 사항이며 (디렉토리에서 가장 최근의 백업을 찾는 것을 좋아합니다) 놀랍도록 간단한 작업입니다.

Find, xargs, stat, tail, awk 및 sort 유틸리티를 사용하는 Linux 솔루션을 제공하려고합니다.

대부분의 사람들은 고유 한 답변을 제공했지만 파일 이름을 올바르게 처리하기 때문에 내 것을 선호하며 유스 케이스를 쉽게 변경할 수 있습니다 (통계 수정 및 인수 정렬)

또한 Windows 에서도이 기능을 사용할 수 있도록 Python 솔루션을 제공합니다.

리눅스 커맨드 라인 솔루션

디렉토리에서 파일 크기별로 정렬 된 전체 파일 목록 만 재귀 적으로 반환

find . -type f -print0 | xargs -0 -I{} stat -c '%s %n' {} | sort -n

이전과 동일하지만 이번에는 가장 큰 파일을 반환합니다.

# Each utility is split on a new line to help 
# visualize the concept of transforming our data in a stream
find . -type f -print0 | 
xargs -0 -I{} stat -c '%s %n' {} | 
sort -n | 
tail -n 1 |
awk '{print $2}'

동일한 정확한 패턴이지만 이제 가장 큰 파일 대신 최신 파일을 선택하십시오.

# (Notice only the first argument of stat changed for new functionality!)
find . -type f -print0 | xargs -0 -I{} stat -c '%Y %n' {} | 
sort -n | tail -n 1 | awk '{print $2}'

설명:

  1. find : 현재 디렉토리에서 모든 파일을 재귀 적으로 찾고 널 문자로 인쇄합니다.
  2. xargs : 표준 입력에서 제공된 인수를 사용하여 명령을 실행하는 유틸리티입니다. 모든 출력 줄에 대해 해당 파일에서 stat 유틸리티를 실행하려고합니다
  3. stat : Stat는 많은 유스 케이스를 가진 멋진 명령입니다. 두 번째 열을 인쇄하고 있는데 첫 번째 열은 블록 크기 (% s)이고 두 번째 열은 파일 이름 (% n)입니다.
  4. 정렬 : 숫자 스위치로 결과를 정렬합니다. 첫 번째 인수는 정수이므로 결과가 올바르게 정렬됩니다
  5. tail : 출력의 마지막 줄만 선택하십시오 (목록이 정렬되어 있기 때문에 이것이 가장 큰 파일입니다).
  6. awk : 파일 이름을 포함하고 재귀 디렉토리에서 가장 큰 파일 인 두 번째 열을 선택하십시오.

파이썬 솔루션

#!/usr/bin/env python
import os, sys
files = list()
for dirpath, dirname, filenames in os.walk(sys.argv[1]):
    for filename in filenames:
        realpath = os.path.join(dirpath, filename)
        files.append(realpath)
files_sorted_by_size = sorted(files, key = lambda x: os.stat(x).st_size)
largest_file = files_sorted_by_size[-1]
print(largest_file)

이 스크립트는 설명하는 데 시간이 조금 더 걸리지 만 기본적으로 스크립트로 저장하면 명령 줄에 제공된 첫 번째 인수를 검색하여 해당 디렉토리에서 가장 큰 파일을 반환합니다. 이 스크립트는 오류 검사를 수행하지 않지만 Python 에서이 문제에 접근하는 방법에 대한 아이디어를 제공해야 하므로이 문제를 해결할 수있는 멋진 플랫폼 독립적 인 방법을 제공합니다.

0
Luke Pafford

비슷한 질문에서 이 답변 의 변형

find . -type f -exec du -ah {} + | sort -rh | more
0
crizCraig