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