[file] 디렉토리와 하위 디렉토리에서 가장 큰 파일을 찾는 방법은 무엇입니까?

우리는 이제 막 UNIX 수업을 시작하고 다양한 Bash 명령을 배우고 있습니다. 우리의 할당은 그 아래에 많은 폴더가있는 디렉토리에서 다양한 명령을 수행하는 것을 포함합니다.

다음을 사용하여 루트 폴더의 모든 일반 파일을 나열하고 계산하는 방법을 알고 있습니다.

find . -type l | wc -l

그러나 전체 디렉토리에서 가장 큰 파일을 찾기 위해 거기에서 어디로 가야할지 알고 싶습니다. 나는 du명령 에 관한 것을 보았지만 우리는 그것을 배우지 않았기 때문에 우리가 배운 것들의 레퍼토리에서 나는 그것을 어떻게 든 ls -t명령에 연결해야한다고 가정합니다 .

그리고 내 ‘링고’가 정확하지 않다면 용서 해주세요, 나는 여전히 그것에 익숙해지고 있습니다!



답변

링크 에서 인용-

특정 디렉토리 및 하위 디렉토리에서 가장 큰 파일 이름 (디렉토리 아님) 10 개를 찾아 인쇄하려는 경우

$ find . -printf '%s %p\n'|sort -nr|head

검색을 현재 디렉토리로 제한하려면 find와 함께 “-maxdepth 1″을 사용하십시오.

$ find . -maxdepth 1 -printf '%s %p\n'|sort -nr|head

그리고 상위 10 개의 가장 큰 “파일 및 디렉토리”를 인쇄하려면 :

$ du -a . | sort -nr | head

** 위의 유일한 “head”대신 “head -n X”를 사용하여 상위 X 개의 가장 큰 파일을 인쇄합니다 (위의 모든 예에서).


답변

현재 디렉토리 및 하위 디렉토리에서 상위 25 개 파일을 찾으려면 다음을 수행하십시오.

find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25

이렇게하면 “sort -nr -k5″파이프 명령을 통해 파일 크기를 기준으로 정렬하여 상위 25 개 파일이 출력됩니다.

동일하지만 사람이 읽을 수있는 파일 크기 :

find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25


답변

find . -type f | xargs ls -lS | head -n 1

출력

-rw-r--r--  1 nneonneo  staff  9274991 Apr 11 02:29 ./devel/misc/test.out

파일 이름 만 원하는 경우 :

find . -type f | xargs ls -1S | head -n 1

이것은 사용을 피하고에서 awk원하는 플래그를 사용할 수있게합니다 ls.

주의 사항 . xargs너무 긴 명령 줄을 작성하지 않으려 고 하기 때문에 파일이 많은 디렉토리에서 실행하면 ls두 번 이상 실행 되기 때문에 실패 할 수 있습니다 . 극복 할 수없는 문제는 아니지만 ( head -n 1ls호출 에서 출력을 수집하고 ls -S단일 파일을 얻을 때까지 반복하여 다시 실행할 수 있음)이 접근 방식을 다소 손상시킵니다.


답변

Linux / UNIX / BSD 파일 시스템에서 가장 큰 파일 / 디렉토리를 찾는 데 사용할 수있는 간단한 명령은 없습니다. 그러나 다음 세 가지 명령 (파이프 사용)을 조합하면 가장 큰 파일 목록을 쉽게 찾을 수 있습니다.

# du -a /var | sort -n -r | head -n 10

사람이 더 읽을 수있는 출력을 원한다면 다음을 시도하십시오.

$ cd /path/to/some/var
$ du -hsx * | sort -rh | head -10

어디,

  • Var 은 검색하려는 디렉토리입니다.
  • du 명령 -h 옵션 : 사람이 읽을 수있는 형식 (예 : 1K, 234M, 2G)으로 크기를 표시합니다.
  • du 명령 -s 옵션 : 각 인수에 대한 합계 만 표시 (요약).
  • du 명령 -x 옵션 : 다른 파일 시스템의 디렉토리를 건너 뜁니다.
  • sort 명령 -r 옵션 : 비교 결과를 반대로합니다.
  • 정렬 명령 -h 옵션 : 사람이 읽을 수있는 숫자를 비교합니다. 이것은 GNU 정렬 전용 옵션입니다.
  • 헤드 명령 -10 또는 -n 10 옵션 : 처음 10 줄을 표시합니다.

답변

이것은 파일이 일반 파일 인 경우 재귀 적으로 나열하고 7 번째 필드 (내 find출력의 크기입니다 . 확인하십시오)로 정렬 하고 첫 번째 파일 만 표시합니다.

find . -type f -ls | sort +7 | head -1

의 첫 번째 옵션 find은 재귀 검색의 시작 경로입니다. – f일반 파일 검색 유형 . 이것을 파일 이름으로 구문 분석하려고하면 파일 이름에 공백, 줄 바꿈 또는 기타 특수 문자가 포함되어 있으면 실패 할 수 있습니다. 옵션 sort은 운영 체제에 따라 다릅니다. 저는 FreeBSD를 사용하고 있습니다.

“더 좋지만”더 복잡하고 무거운 솔루션은 find디렉토리를 순회하는 것입니다.하지만 stat파일에 대한 세부 정보를 가져 오는 데 사용 awk하고 가장 큰 크기를 찾는 데 사용할 수 있습니다. 의 출력 stat도 운영 체제에 따라 다릅니다.


답변

현재 작업 디렉토리에서 가장 큰 파일 또는 폴더를 찾습니다.

ls -S /path/to/folder | head -1

모든 하위 디렉토리에서 가장 큰 파일을 찾으려면 :

find /path/to/folder -type f -exec ls -s {} \; | sort -nr | awk 'NR==1 { $1=""; sub(/^ /, ""); print }'


답변

Solaris에서는 다음을 사용합니다.

find . -type f -ls|sort -nr -k7|awk 'NR==1{print $7,$11}' #formatted

또는

find . -type f -ls | sort -nrk7 | head -1 #unformatted

여기에 게시 된 다른 것은 작동하지 않았기 때문입니다. 그러면 $PWD및 하위 디렉터리 에서 가장 큰 파일을 찾습니다 .