우리는 이제 막 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 1
각 ls
호출 에서 출력을 수집하고 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
및 하위 디렉터리 에서 가장 큰 파일을 찾습니다 .