확장명이 .log인 모든 파일을 찾아 파일 크기별로 정렬할 수 있나요?

확장명이 .log인 모든 파일을 찾아 파일 크기별로 정렬할 수 있나요?

CentOS 6.8을 사용하고 있습니다.

확장명이 .log인 모든 파일을 찾아 파일 크기별로 정렬하고 파일 이름 옆에 파일 크기를 표시하는 것이 가능한지 궁금합니다.

현재 이 명령을 사용하여 확장자가 .log인 모든 파일을 찾고 있습니다.

find .  -name \*.log

답변1

이것은 나에게 효과적인 것 같습니다.

find .  -name \*.log -ls | sort -r -n -k7

어디...

find=https://man7.org/linux/man-pages/man1/find.1.html

.= 현재 폴더

-name=를 사용하면 파일 이름 패턴을 검색할 수 있습니다. 이 경우 별표 앞에 슬래시가 추가되어 와일드카드 문자가 될 수 있습니다.

-ls= 형식으로 출력을 나열합니다 ls -dils.

sort=https://man7.org/linux/man-pages/man1/sort.1.html

-r= 결과를 가장 큰 것부터 가장 작은 것 순으로 뒤집습니다.

-n= 수치로 비교

-k= 필드를 정렬합니다. 이 경우 7번째 필드에는 출력에 크기 변수가 있습니다.

| head -n 20이 끝에 추가하여 상위/최대 20개 파일을 얻을 수도 있습니다 .

답변2

여기에는 두 가지 옵션이 있습니다. 하나는 bash 중심이고 다른 하나는 단지 재미를 위한 것입니다.


( shopt -s globstar dotglob; stat --format "%s %n" -- **/*.log | sort -rn )

이것:

  • shopt명령문이 현재/실행 중인 쉘에 영향을 주지 않도록 서브쉘에서 실행됩니다 .
  • globstar 및 dotglob 설정주택 옵션globstar는 **구문이 하위 디렉터리의 파일과 일치하도록 허용합니다. dotglob은 쉘 와일드카드가 다음으로 시작하는 디렉터리와 일치하도록 합니다..
  • stat파일 크기와 이름을 수집하는 방법은 CentOS 시스템에 기본적으로 설치되며 POSIX에만 국한되지 않습니다.
  • 여기서 실제 작업은 **/*.log현재 디렉터리와 모든 하위 디렉터리에서 일치하는 파일 이름(*.log)을 수집하는 globstar에 의해 수행됩니다.
  • 그런 다음 파일을 크기와 이름별로 숫자순으로 역순으로 정렬하여 가장 큰 파일을 먼저 가져옵니다( 크기 오름차순으로 정렬 -n하지 않음 ).r

또 다른 bash 중심 옵션이지만 플래그를 사용하여 ls인수를 크기별로 정렬합니다.

shopt -s globstar dotglob
ls -lS **/*.log

# or, in reverse:

ls -lrS **/*.log

시스템과 인내심을 시험하기 위해 특정 순서에 따라 특정 크기의 파일을 검색할 수 있습니다.

for((i=9223372036854775807;i>=0;i--)); do find . -name \*.log -size ${i}c -exec stat --format "%s %n" {} + ; done

9,223,372,036,854,775,807을 실행합니다(이상9조) find명령을 사용하여 가능한 모든 크기의 *.log 파일을 찾고, 다시 호출하면 stat파일 크기와 이름만 표시됩니다. 동일한 크기의 파일이 여러 개 있는 경우 환경에 맞는 {} +만큼 많은 파일 이름을 전달하기 위한 find 구문을 포함했습니다 . 쉘의 정수 크기를 기준으로 하거나 가장 큰 로그 파일의 크기를 알고 있는 경우 루프 범위를 조정 stat해야 할 수도 있습니다 . for이 "옵션"의 "이점"은 stat간단한 ls.

답변3

log라는 이름의 모든 폴더와 해당 크기를 나열하려면 다음 명령을 실행하십시오.

du -csh $(find / -type d -iname log)

답변4

다음 명령을 시도해 보세요.

 find .  -name \*.log |ls -lSh

관련 정보