기본적으로 내 요구 사항은 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
.
각주:
- 기본적으로 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
현재 디렉터리에서 로 끝나는 모든 파일을 압축하려고 하면 .log
STDIN에서 파일 이름을 가져오지 못합니다.
디렉터리에 혼합 파일, 즉 로그 파일 이외의 파일이 있는 경우 다음을 시도해 볼 수 있습니다.
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