Scripting

在目錄中僅保留一定數量的備份(tarball)

  • December 29, 2020

在我的 debian 9.4 機器上,我有一個腳本可以自動壓縮和備份我在 srv/ 中的所有文件,日期名稱為 xx-xx-xxxx.tar。它被移動到我的備份/目錄。

我想將文件夾中 .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

在腳本末尾添加以下內容:

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

這將在目錄中找到您的備份文件 (tar.gz),並刪除任何超過 10 天的備份。

如果您有可用的 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 qualifier”,在括號中。該 glob 限定符表示按修改時間(最新的優先)“rder o”(排序)匹配文件;m然後對該列表進行切片以僅選擇第 11 個及以後的文件 - 然後將其刪除,留下 10 個最新文件。語法的-1意思是“從列表的末尾倒數”,實際上是指列表的最後一個元素。

引用自:https://unix.stackexchange.com/questions/480898