특정 디렉토리에서 가장 큰 파일 상위 20개를 표시하려고 합니다. 모든 하위 디렉터리를 포함하고 싶지만 실제 디렉터리 자체는 포함하고 싶지 않습니다. (저는 파일만 원합니다.) 저는 이 작업을 수행할 수 있는 방법을 찾으려고 노력해 왔지만 온라인에서 찾은 솔루션 중 어느 것도 제가 사용하고 있는 Unix 버전에서 작동하지 않습니다.
지금까지 나는 이것을 가지고 있습니다 :
find /dir -type f -exec ls -al {} \; | sort -nr | head -n 20 du -a -g /dir/ | sort -n -r | head -n 20
Riot은 다음과 같은 목록을 제공했습니다.
file1.txt
file1.txt
file1.txt
file2.txt
등. 두 번째 명령은 다음을 제공합니다.
500 \path\
250 \path\to\
100 \path\to\directory\
등. 내가 찾고 있는 결과는 다음과 같습니다.
500 \path\file1.txt
250 \path\to\file2.txt
100 \path\to\directory\file3.txt
등. 문제에 대해 다음 해결 방법을 시도했습니다.
- 재귀적으로 가장 큰 파일 찾기
- https://stackoverflow.com/questions/12522269/how-to-find-the-largest-file-in-a-directory-and-its-subdirectories
또한 이 튜토리얼을 따라해 보았습니다.
답변1
find dir/ -type f -exec du -a {} + | sort -nr | head -n 20
답변2
zsh
셸 에서 와일드카드 패턴
/dir/**/*(.DOL[1,20])
디렉토리 안이나 아래에 있는 가장 큰 20개의 파일로 확장될 경로 이름 /dir
(숨겨진 이름도 고려되며 심볼릭 링크 파일은 무시됩니다).
glob 한정자의 다양한 부분은 다음을 (.DOL[1,20])
의미합니다.
.
: 일반 파일만 고려됩니다.D
dotglob
:숨겨진 이름이 있는 파일도 고려하세요(예: in 의 효과bash
).OL
: 결과를 파일 크기별로 내림차순으로 정렬합니다(O
= 내림차순,o
= 오름차순 아님;L
= "길이").[1,20]
: glob으로 확장된 20번째 요소를 반환합니다.
이 **
패턴은 "재귀적으로" 일치하므로 그 자체로는 디렉터리 안이나 아래의 모든 이름 /dir/**/*
과 일치합니다 ./dir
다음과 함께 사용하세요 ls
.
ls -l -f /dir/**/*(.DOL[1,20])
표시된 목록이 정렬되지 않도록 하려면 -f
with 를 사용해야 합니다 .ls
또는 du
파일을 호출합니다.
du /dir/**/*(.DOL[1,20])