这是我备份的结构:
cron_hourly_backup的目录中。ddmmyyyy格式命名。db1_000000.zip .... db5_000000.zip upto db1_230000.zip ... db5_230000.zip)具有唯一的名称。现在,我想以编程方式删除所有大于1天的备份文件(OR,保留今天的备份和昨天的备份),但是每天保留一个最新的db (所有5 dbs)。我怎样才能做到这一点?
目前我正在做这个:
find . -type f \( -name "*_00*" \
-o -name "*_01*"-o -name "*_02*" \
-o -name "*_03*" -o -name "*_04*" \
-o -name "*_05*" -o -name "*_06*" \
-o -name "*_07*" -o -name "*_08*" \
-o -name "*_09*" -o -name "*_10*" \
-o -name "*_11*" -o -name "*_12*" \
-o -name "*_13*" -o -name "*_14*" \
-o -name "*_14*" -o -name "*_15*" \
-o -name "*_16*" -o -name "*_17*" \
-o -name "*_18*" -o -name "*_19*" \
-o -name "*_20*" -o -name "*_21*" \
-o -name "*_22*" \) -delete这很好,问题是
任何关于如何解决上述两个问题的建议都是非常感谢的。
发布于 2017-09-12 14:44:04
不知道“但是每天保留一个最新的db (所有5个dbs)”意味着什么。如果它的意思是“每天只保留最后一个(按字典顺序排列)文件”,如果您有coreutils date实用程序,那么这样的bash脚本可以工作(没有测试):
#/usr/bin/env bash
declare -a l # array of backup files
bd=cron_hourly_backup # backup dir
td=$( date +"%d%m%Y" ) # today
yd=$( date -d yesterday +"%d%m%Y" ) # yesterday
for n in "$bd"/*; do
if [ ! -d "$n" ]; then
continue # skip if not a directory
fi
if [[ "$n" == "$bd/$td" || "$n" == "$bd/$yd" ]]; then
continue # skip if today or yesterday
fi
l=( $( ls "$n" ) ) # populate array
# loop over all backup files except the last one
for (( i = 0; i < ${#l[@]} - 1; i += 1 )); do
echo "rm -f $n/${l[i]}" # comment when OK
# rm -f "$n/${l[i]}" # uncomment when OK
done
done如果您希望保留每个dbN_*中的最后一个1<=N<=6,那么您可以再使用一个循环级别(未测试):
#/usr/bin/env bash
declare -a l # array of backup files
bd=cron_hourly_backup # backup dir
td=$( date +"%d%m%Y" ) # today
yd=$( date -d yesterday +"%d%m%Y" ) # yesterday
for n in "$bd"/*; do
if [ ! -d "$n" ]; then
continue # skip if not a directory
fi
if [[ "$n" == "$bd/$td" || "$n" == "$bd/$yd" ]]; then
continue # skip if today or yesterday
fi
for (( j = 1; j <= 6; j += 1 )); do
l=( $( ls "$n/db${j}_"* ) ) # populate array
# loop over all backup files except the last one
for (( i = 0; i < ${#l[@]} - 1; i += 1 )); do
echo "rm -f ${l[i]}" # comment when OK
# rm -f "${l[i]}" # uncomment when OK
done
done
donehttps://stackoverflow.com/questions/46175202
复制相似问题