私の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時間に1時間に1つ、過去30日に1日に1つ、過去30日に1週間に1つずつバックアップを「代数的に」分散させることが目標であるバックアップ保存ポリシーを実装するのに役立ちます。過去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