최신 파일 10개 압축

최신 파일 10개 압축

기본적으로 내 요구 사항은 10개의 최신 로그를 찾아서 zip으로 압축하는 것입니다. 명령을 시도했지만 ls -Lt | head -10 | zip log.zip *.log출력이 일치하지 않습니다.

답변1

현재 디렉터리에서 10개의 최신(일반) 파일을 안전하게 선택하려면 를 사용하는 것이 좋습니다. zsh왜냐하면 수정 시간을 기준으로 파일을 안전하고 기본적으로 선택하기 때문입니다.

zsh -c 'zip log.zip *.log(.om[1,10])'

이는 zsh의 두 개의 와일드카드("glob") 한정자와 아래 첨자 연산자를 사용합니다.

  • *.log( ... )-- 와일드카드로 시작합니다 . *.log현재 디렉터리에서 다음으로 끝나는 파일 1.log 개를 모두 선택하고 다음으로 필터링합니다.
  • .-- 일반 파일만 포함하도록 결과 목록을 필터링합니다.
  • om-- 수정 시간을 기준으로 결과 목록을 정렬("정렬")하고 가장 최근 항목부터 정렬합니다.
  • [1,10]-- 요소 1~10(가장 최근 10개 파일)을 선택하여 결과 목록 범위를 좁힙니다.

zsh가 10개의 최신 일반 파일을 생성하면 이를 명령에 전달합니다 zip.


각주:

  1. 기본적으로 zsh는 숨겨진(점) 파일을 선택하지 않습니다. 예를 들어 .foo.log다음과 같은 파일이 있는 경우;그리고이를 선택하려면 D전역 한정자( *.log(.Dom[1,10]))를 포함하거나 GLOB_DOTS옵션을 설정( 사용 setopt globdots)할 수 있습니다.

답변2

첫 번째백업하기

다음을 시도해 보세요.

ls -Lt | head -10 | xargs zip log.zip 

주문

zip log.zip *.log

현재 디렉터리에서 로 끝나는 모든 파일을 압축하려고 하면 .logSTDIN에서 파일 이름을 가져오지 못합니다.

디렉터리에 혼합 파일, 즉 로그 파일 이외의 파일이 있는 경우 다음을 시도해 볼 수 있습니다.

ls -Lt *.log | head -10 | xargs zip log.zip

답변3

다음 명령을 사용해보십시오

ls -ltrh| awk '$1 ~ /-rw/{print $0}'|sed -n '1,10p'| awk '{print "zip" " " $NF".zip" " " $NF}'| sh

관련 정보