Bash shell脚本不删除文件

Bash shell脚本不删除文件,bash,shell,Bash,Shell,我正在使用一些shell脚本编码,如下所示 DBHOSTNAME=******** DBUSERNAME=***** DBPASSWORD=****** DBNAME=****** BACKUPFOLDER=$HOME/******* DELETEFILES=Y DAILYBACKUP=Y NUMDAILYBACKUPS=2 WEEKLYBACKUP=Y NUMWEEKLYBACKUPS=2 MONTHLYBACKUP=Y NUMMONTHLYBACKUPS=2 TODA

我正在使用一些shell脚本编码,如下所示

DBHOSTNAME=********

DBUSERNAME=*****

DBPASSWORD=******

DBNAME=******

BACKUPFOLDER=$HOME/*******

DELETEFILES=Y

DAILYBACKUP=Y

NUMDAILYBACKUPS=2

WEEKLYBACKUP=Y

NUMWEEKLYBACKUPS=2

MONTHLYBACKUP=Y

NUMMONTHLYBACKUPS=2

TODATE=$(date +%d)
TOMORROW=`date +%d -d "1 day"`
TODAY=$(date +%a)
MONTH=$(date +%B)
WEEK=$(date +%U)

if [ $TODATE -gt $TOMORROW ] && [ "$MONTHLYBACKUP" == "Y" ]
then
    /usr/bin/mysqldump -h $DBHOSTNAME -u $DBUSERNAME -p$DBPASSWORD $DBNAME  | gzip > $BACKUPFOLDER/$DBNAME'_'`date '+%m-%d-%Y'`'_'$MONTH.sql.gz
else
    if [ "$TODAY" == "Sat" ] && [ "$WEEKLYBACKUP" == "Y" ]
    then
        /usr/bin/mysqldump -h $DBHOSTNAME -u $DBUSERNAME -p$DBPASSWORD $DBNAME  | gzip > $BACKUPFOLDER/$DBNAME'_'`date '+%m-%d-%Y'`'_'Week$WEEK.sql.gz
    else 
        if [ "$DAILYBACKUP" == "Y" ] 
        then
            /usr/bin/mysqldump -h $DBHOSTNAME -u $DBUSERNAME -p$DBPASSWORD $DBNAME  | gzip > $BACKUPFOLDER/$DBNAME'_'`date '+%m-%d-%Y'`'_'$TODAY.sql.gz
        fi
    fi
fi




if [ $DELETEFILES == Y ]
then
    NUMWEEKLY=$[$NUMWEEKLYBACKUPS*7]
    NUMMONTHLY=$[$NUMMONTHLYBACKUPS*31]
    find $BACKUPFOLDER/*Sun.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Mon.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Tue.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Wed.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Thu.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Fri.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Sat.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
    find $BACKUPFOLDER/*Week*.sql.gz -type f -mtime +$NUMWEEKLY -delete 2> /dev/null
    find $BACKUPFOLDER/*January.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*February.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*March.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*April.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*May.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*June.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*July.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*August.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*September.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*October.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*November.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
    find $BACKUPFOLDER/*December.sql.gz -type f -mtime +$NUMMONTHLY -delete 2> /dev/null
fi
这是工作正常,但不删除旧文件,我采取了以下地址

我需要的是3天的备份 像

今天文件在文件夹中 03/01/2017 04/01/2017 2017年1月5日

明天应该是 04/01/2017 05/01/2017 2017年1月6日


它应该删除3jan文件

除了评论者所说的,我认为一个关键问题是您的
find
命令。例如,您有:

find $BACKUPFOLDER/*Sun.sql.gz -type f -mtime +$NUMDAILYBACKUPS -delete 2> /dev/null
但这应该是正确的

find "$BACKUPFOLDER" -name '*Sun.sql.gz' -type f -mtime "+$NUMDAILYBACKUPS" -delete 
使用
find
时,分别列出路径(
“$BACKUPFOLDER”
)和文件名(
-name'*Sun.sql.gz'
)。您还可以单引号引用文件名,以防止shell扩展它们


调试时,不要使用
2>/dev/null
。这将丢弃错误消息,否则可能会对解决问题有所帮助:)。

首先,不要使用双重相等的
==
,只放置一个相等的
=
。在带有多个语句的条件句上使用double
[[
]
,我的意思是当您使用
&&
时。例如:
if[[$TODATE-gt$tomory]]&[$MONTHLYBACKUP=“Y”]]
if[[$TODATE-gt$tomory&&“$MONTHLYBACKUP”=“Y”]]
@OscarAkaElvis如果您选择使用
[
,您可以在单个命令中使用
&
,。使用
$(…)
而不是
$[…]
。后者已经被弃用了几十年。是的,你也可以。注释编辑。我也发布了这篇文章,但从技术上讲,路径可以是文件名,而不仅仅是目录。(在这种情况下,你让shell通过globbing找到大多数候选文件;
find
只是通过
mtime
对它们进行过滤)。