특정 디렉터리에서 가장 큰 파일 상위 20개 나열

특정 디렉터리에서 가장 큰 파일 상위 20개 나열

특정 디렉토리에서 가장 큰 파일 상위 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

등. 문제에 대해 다음 해결 방법을 시도했습니다.

또한 이 튜토리얼을 따라해 보았습니다.

답변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])의미합니다.

  • .: 일반 파일만 고려됩니다.
  • Ddotglob:숨겨진 이름이 있는 파일도 고려하세요(예: in 의 효과 bash).
  • OL: 결과를 파일 크기별로 내림차순으로 정렬합니다( O= 내림차순, o= 오름차순 아님; L= "길이").
  • [1,20]: glob으로 확장된 20번째 요소를 반환합니다.

**패턴은 "재귀적으로" 일치하므로 그 자체로는 디렉터리 안이나 아래의 모든 이름 /dir/**/*과 일치합니다 ./dir

다음과 함께 사용하세요 ls.

ls -l -f /dir/**/*(.DOL[1,20])

표시된 목록이 정렬되지 않도록 하려면 -fwith 를 사용해야 합니다 .ls

또는 du파일을 호출합니다.

du /dir/**/*(.DOL[1,20])

관련 정보