최신 백업 파일 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.zip
1. 파일 자체는 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
하다와일드카드가 허용되지만 여기서는 유용한 방식으로 처리되지 않습니다. 일치하는 각 파일은 회전해야 하는 항목 집합의 첫 번째 항목으로 처리됩니다.
그것은 당신에게 효과가 없을 수도 있고, 아니면 당신의 파일이 약간 지저분해져서 이름을 바꿔야 할 것 같습니다.