특정 수의 백업(타르볼)만 디렉터리에 보관하세요.

특정 수의 백업(타르볼)만 디렉터리에 보관하세요.

내 Debian 9.4 컴퓨터에는 srv/에 있는 날짜 이름이 xx-xx-xxxx.tar인 모든 파일을 자동으로 압축하고 백업하는 스크립트가 있습니다. 내 backups/ 디렉토리로 이동되었습니다.

폴더의 .tar 파일(백업) 수를 10개로 제한하고 새 tar가 생성될 때마다 가장 오래된 .tar 파일을 삭제하고 싶습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 이것은 내 스크립트입니다.

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=`date +%b-%d-%y`            # This Command will add date in Backup File Na$
FILENAME=backup-$TIME.tar.gz    # Here i define Backup file name format.
SRCDIR=/srv/daemon-data                    # Location of Important Data Directo$
DESDIR=/backups           # Destination of backup file.
tar -cpzf $DESDIR/$FILENAME $SRCDIR 
#END

답변1

스크립트 끝에 다음을 추가합니다.

find "$DESDIR/$FILENAME" -type f -mtime +10 -delete

이렇게 하면 디렉터리에서 백업 파일(tar.gz)을 찾아 10일보다 오래된 모든 백업을 삭제합니다.

답변2

zsh를 사용할 수 있는 경우 이를 사용하여 bash 스크립트를 보완할 수 있습니다.

# ...
tar -cpzf "$DESDIR"/"$FILENAME" "$SRCDIR" 
zsh -c 'rm -- "$DESDIR"/backup-*-tar.gz(om[11,-1])'

이것이 의미하는 바는 zsh파일 목록을 사용하여 호출해야 한다는 것입니다. rm파일 목록은 $DESDIR/backup-*-tar.gz와일드카드(스크립트에서 수집하고 따옴표를 추가함)와 괄호 안에 zsh "glob 한정자"가 뒤따라 생성됩니다. 이 glob 한정자는 o파일 "rder"(정렬)를 수정 시간(최신 항목부터)으로 일치시킨 m다음 목록을 분할하고 11번째 이후의 파일만 선택한 다음 이를 제거하고 10개의 최신 문서를 남겨둡니다. 이 -1구문은 "목록 끝부터 뒤로 계산"을 의미하며 목록의 마지막 요소를 효과적으로 참조합니다.

답변3

시간차그것이 바로 그것이 하는 일입니다.

Timegaps는 크로스 플랫폼 명령줄 프로그램입니다. 각 항목의 연령과 사용자가 지정한 시간 분류 규칙을 기준으로 일련의 항목을 거부된 항목과 허용된 항목으로 분류합니다.

시간 간격을 사용하면 항목 세트 수가 줄어들고, 허용되는 항목 간의 시간 간격은 항목의 수명이 길어질수록 커집니다. 이는 지난 24시간 동안 매 시간마다 하나씩, 지난 30일 동안 매일 하나씩, 지난 30일 동안 매주 하나씩 백업을 "대수적으로" 분산시키는 것이 목표인 백업 보존 정책을 구현하는 데 유용합니다. 지난 8주, 그리고 곧.

답변4

시스템 유틸리티와 동일한 논리를 사용해야 합니다.로그 회전(8), 최대 파일 수를 유지하도록 구성할 수 있습니다. 사용자 공간에는 이 답변에 설명된 대로 logrotate와 같은 많은 유틸리티가 있습니다.https://superuser.com/a/868519

그렇다면 간단한 구성 파일은 다음과 같습니다.

"/home/coolman/backups" {
    rotate 10
}

명령줄을 사용해야 합니다.

/usr/sbin/logrotate -s $HOME/backups.state -f $HOME/backups.config

관련 정보