특정 날짜 범위 내에서 디렉터리에서 가장 큰 파일을 찾습니다.

특정 날짜 범위 내에서 디렉터리에서 가장 큰 파일을 찾습니다.

나는 특정 날짜 범위를 기준으로 디렉토리에서 가장 큰 20개의 파일을 찾을 수 있는 UNIX 명령 또는 명령 세트를 찾고 있습니다.

이를 위해 몇 개의 파일을 터치한 다음 해당 파일 날짜를 기준으로 조회를 수행하여 날짜 범위를 설정할 수 있다고 생각했습니다. 즉

touch /tmp/point.start -d "2018-06-01 00:00"
touch /tmp/point.end -d "2018-06-30 00:00"

그런 다음 실행

find . -newer /tmp/point.start ! -newer /tmp/point.end

실행하려는 디렉터리에서 최신 20개 파일을 가져오려면,

ls -ltr | sort -nk5 | tail -20

하지만 둘을 합칠 수는 없는 것 같아요

find . -newer /tmp/point.start ! -newer /tmp/point.end | ls -ltr | sort -nk5 | tail -20

첫 번째 부분을 무시하고 크기에 관계없이 디렉토리에서 가장 큰 20개의 파일을 나열하십시오. 나는 매우 명백한 것을 놓치고 있다고 확신하지만 무엇인지 모르겠습니다!

(저는 RedHat 5.3을 사용하고 있으며 newermt에 액세스할 수 없습니다)

답변1

-printf다음과 같이 작업 할 수 있는 경우 find:

find . -newer /tmp/point.start ! -newer /tmp/point.end -printf '%s %p\n' | 
  sort -rn | head -20

답변2

그리고 zsh:

autoload age # best in ~/.zshrc if you use that often
ls -ldS -- *(De:age 2018-06-01 2018-06-30:OL[1,20])
  • -S: 크기별로 정렬합니다. GNU ls(RedHat 5.3에서 볼 수 있듯이) -U를 사용 zsh하면 OL.
  • (...): 글로벌 예선
  • D: 도트 파일을 무시하지 마십시오.
  • e:code:코드를 평가하여 파일 선택 여부 결정
  • age date1 date2: 이 범위의 mtime을 포함하는 파일에 대해 true를 반환합니다(시간 부분 없음, 기본값은 00:00:00).
  • OL: 길이(크기) 기준으로 역순으로 정렬
  • [1,20]: 처음 20개만 선택합니다.

답변3

이 시도,

find . -newer /tmp/point.start ! -newer /tmp/point.end  ! -path . | xargs ls -ltr | sort -nk5 | tail -20
  • xargs 표준 입력에서 명령줄 빌드 및 실행

관련 정보