최신 백업 파일 4개를 보관하고 오래된 백업 파일을 삭제하는 방법

최신 백업 파일 4개를 보관하고 오래된 백업 파일을 삭제하는 방법

최신 백업 파일 4개를 보관하고 오래된 백업 파일을 삭제하는 방법은 무엇입니까?

backup-Y-M-D.zip
backup-Y-M-D.zip
backup-Y-M-D.zip
backup-Y-M-D.zip
.
.
backup-Y-M-D.zip

확장자가 .zip인 파일이 80개 정도 있는데 생성 날짜를 기준으로 최신 8개 파일을 유지하고 싶습니다. 또한 logrotate를 시도했지만 아무 작업도 수행하지 않았기 때문에 로그 회전에 실패했습니다. 다음은 logrotate의 구성 파일이다.

/root/test/*.zip {
    daily
    missingok
    extension .zip
    rotate 4
    nocompress 
}

답변1

우선 구성이 올바르지 않은 것 같습니다. 와일드카드가 아닌 logrotate실제 파일 이름(예: )이 필요합니다./root/test/backup.zip1. 파일 자체는 logrotate예상되는 형식으로 이름을 지정해야 합니다. 또는 오히려 logrotate파일에 대해 예상되는 이름 지정을 알려주어야 합니다(그렇지 않으면 file.1.ext유사하다고 가정합니다). 날짜 형식을 지정하면 가능할 수도 있지만 도구가 설계된 것 이상으로 도구를 사용하는 것처럼 느껴집니다.

다음과 같은 것이 당신이 원하는 것일 수 있습니다.

find '/root/test' -maxdepth 1 -type f -name 'backup-*.zip' -print0 \
  | sort -rz \
  | tail -zn+5 \
  | xargs -t0 -n1 true rm

true이는 안전을 위해 제한됩니다. 활성화하려면 마지막 단어를 제거하세요. -n1출력의 가독성을 향상시키기 위한 것이므로 이를 제거할 수도 있습니다 .

그런 다음 이 파일 에이징 프로세스를 트리거할 무언가가 필요합니다. 일반적으로 이는 백업 파일을 생성한 동일한 프로세스의 일부이므로 필요할 때 정확히 발생합니다. 이것이 가능하지 않은 경우(예: 파일이 일부 원격 프로세스를 통해 전송되는 경우) crontab일정에 따라 실행하기 위한 항목을 생성하는 것이 좋습니다.


1이것만 자격을 갖추려면,logrotate 하다와일드카드가 허용되지만 여기서는 유용한 방식으로 처리되지 않습니다. 일치하는 각 파일은 회전해야 하는 항목 집합의 첫 번째 항목으로 처리됩니다.

그것은 당신에게 효과가 없을 수도 있고, 아니면 당신의 파일이 약간 지저분해져서 이름을 바꿔야 할 것 같습니다.

관련 정보