我正在尝试在我的脚本中添加一种删除早于 3 天前的备份的方法。
请参阅下面的精简简化版本,其中仅保留了删除部分。
据我了解,${BACKUP_DEST[$i]}/$OLDBACKUP
应该输出类似“/Users/christopherdavies/Desktop/rsync/test1.co.uk/07-06-18”的内容。
但是,每次运行时,它都会删除上面的“test1.co.uk”文件夹,无论它是否存在 3 天。
有人能指出我正确的方向吗?我一直没能取得任何进展……一双新鲜的眼睛?
#!/bin/sh
WEBSITE_HOST=(
"[email protected]"
"[email protected]"
)
BACKUP_DEST=(
"/Users/christopherdavies/Desktop/rsync/test1.co.uk"
"/Users/christopherdavies/Desktop/rsync/test2.co.uk"
)
OLDBACKUP=`date -d "3 days ago" +"%d%m%Y"`
SITE_COUNT=${#WEBSITE_HOST[@]}
for (( i = 0; i < SITE_COUNT; i++ )); do
# Remove old backups
if [ -d "${BACKUP_DEST[$i]}/$OLDBACKUP" ]; then rm -Rf ${BACKUP_DEST[$i]}/$OLDBACKUP; fi
done
exit 0
macOS 上的
date
实用程序(我假设您使用的是从用户主目录的位置判断)不是 GNUdate
,因此不支持其所有功能。这意味着您的
OLD_BACKUP
变量将为空(并且您应该在date
运行时看到一条错误消息),这反过来意味着它${BACKUP_DEST[$i]}
是被删除的目录。相反,您可以使用
date -v -3d +'%d-%m-%Y'
.或者,安装 GNU coreutils 并使用 GNU
date
。对您的代码所做的其他更改:
exit 0
从末尾删除并添加set -e
. 如果脚本失败,您将希望能够注意到它。未使用网站数组。
循环遍历数组中的项目而不是使用索引,这样更容易阅读。
如果您想要单行简单
if
语句,则可以改用短路语法(更短)。使用小写变量名。
始终引用变量扩展。
这是一个
bash
脚本,所以它应该bash
在#!
-line 上引用。