删除旧目录

删除旧目录

我正在尝试在我的脚本中添加一种方法来删除 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

答案1

macOS 上的实用程序date(从用户主目录的位置来看,我认为您正在使用它)不是 GNU date,因此不支持其所有功能。

这意味着您的OLD_BACKUP变量将为空(运行时您应该看到一条错误消息date),这又意味着它是${BACKUP_DEST[$i]}被删除的目录。

相反,您可以使用date -v -3d +'%d-%m-%Y'.

#!/bin/bash

set -e

backup_dest=(
    '/Users/christopherdavies/Desktop/rsync/test1.co.uk'
    '/Users/christopherdavies/Desktop/rsync/test2.co.uk'
)

when=$( date -v -3d +'%d-%m-%Y' )

for backup in "${backup_dest[@]}"; do
    [ -d "$backup/$when" ] && rm -Rf "$backup/$when"
done

或者,安装 GNU coreutils 并使用 GNU date

对您的代码所做的其他更改:

  • exit 0从末尾删除并添加set -e.如果脚本失败,您将希望能够注意到它。

  • 未使用网站数组。

  • 循环遍历数组中的项目而不是使用索引,这样更容易阅读。

  • 如果您想要单行简单if语句,您可以使用短路语法(更短)。

  • 使用小写变量名。

  • 始终引用变量扩展。

  • 这是一个bash脚本,所以它应该bash#!-line 上引用。

相关内容