无法从脚本.sh中删除.tgz文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从脚本.sh中删除.tgz文件相关的知识,希望对你有一定的参考价值。

那里:我创建了一个.sh脚本,我正在创建一个mongodb数据库的备份。当我创建备份时一切都很好,问题是它不会消除以前的备份(我每天都在消除5天前的备份)。这是我的脚本:

#!/bin/bash
BACKUPS_DIR="/path/to/backups"
TIMESTAMP=`date +%d-%m-%y`
BACKUP_NAME="BACKUP-$TIMESTAMP"
mongodump --port 27017 --out $BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
rm -rf $BACKUP_NAME
DATE_TO_DELETE=`date -d "$date -5 days" +%d-%m-%y`
FILE_TO_DELETE="BACKUP-$DATE_TO_DELETE"
rm -rf $FILE_TO_DELETE.tgz

当我使用./script_name.sh运行脚本一切正常。当我将其添加到crontab时,它会创建备份但不会从5天前删除备份。

感谢你的帮助。

答案

您应该修改脚本以确保从正确的目录运行rm -fr。否则你可以删除你不想要的东西(问我怎么知道......!)。 Crontab不会从它所在的目录运行脚本。

所以,如果你这样做:

cd $(which script_name.sh)
./script_name.sh

一切都很好。但是crontab没有做cd。请注意您的tar命令如何正常工作,因为您在目标文件中指定了$BACKUP_DIR

这一切都是这样说的:

#!/bin/bash
BACKUPS_DIR="/path/to/backups"
TIMESTAMP=`date +%d-%m-%y`
BACKUP_NAME="BACKUP-$TIMESTAMP"
mongodump --port 27017 --out $BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
rm -rf $BACKUP_NAME
DATE_TO_DELETE=`date -d "$date -5 days" +%d-%m-%y`
FILE_TO_DELETE="BACKUP-$DATE_TO_DELETE"

rm -rf $BACKUPS_DIR/$FILE_TO_DELETE.tgz

另一种可能性是使用find删除$BACKUPS_DIR中超过5天的所有文件。

以上是关于无法从脚本.sh中删除.tgz文件的主要内容,如果未能解决你的问题,请参考以下文章

sh 从git存储库中永久删除文件/文件夹的脚本

sh 用于从repo历史记录中删除所有PSD文件的Bash脚本。

sh 从bash终端删除所有heroku应用程序 - 无需脚本文件

sh 从bash终端删除所有heroku应用程序 - 无需脚本文件

Docker - 无法通过脚本删除容器内的文件

shell脚本用户管理程序