對於備份腳本,我需要清理舊的備份。我如何保留最近的N份備份並刪除剩餘的備份?備份腳本:如何保留最後的N個條目?
備份可以是單個文件夾,也可以是單個文件,腳本會將所有備份保留在文件夾或文件中(不混合)。
如果可能,我想avoid parsing of the output of ls
.儘管備份文件夾中的所有條目都應該由備份腳本創建,並且條目名稱中不應該包含有趣的字符,但黑客可能能夠創建新的在那裏的條目。
對於備份腳本,我需要清理舊的備份。我如何保留最近的N份備份並刪除剩餘的備份?備份腳本:如何保留最後的N個條目?
備份可以是單個文件夾,也可以是單個文件,腳本會將所有備份保留在文件夾或文件中(不混合)。
如果可能,我想avoid parsing of the output of ls
.儘管備份文件夾中的所有條目都應該由備份腳本創建,並且條目名稱中不應該包含有趣的字符,但黑客可能能夠創建新的在那裏的條目。
這應該這樣做(未經測試!):
#!/usr/bin/env bash
set -o errexit -o noclobber -o nounset -o pipefail
i=0
max=7 # Could be anything you want
while IFS= read -r -d '' -u 9
do
let ++i
if [ "$i" -gt "$max" ]
then
rm -- "$REPLY"
fi
done 9< <(find /var/backup -type f -maxdepth 1 -regex '.*/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.tar\.gz' -print0 | sort -rz)
從外面解釋。
YYYY-MM-DD.tar.gz
格式的/ var/backup(和而不是子目錄)中的所有文件。cat
,ssh
或默認讀取標準輸入的其他程序有任何問題。
爲什麼要避免'ls'? – kev 2012-03-21 15:25:47
@kev http://mywiki.wooledge.org/ParsingLs – jordanm 2012-03-21 22:12:12