Bash 脚本从 Google Drive 文件夹中删除超过 7 天的备份文件

问题描述 投票:0回答:1

我创建了从数据库到谷歌驱动器的文件自动备份,并使用 cron 作业安排它每天执行。现在我想从谷歌驱动器目录中自动删除这些超过一周的文件。删除服务器目录中存储的文件应该也会删除一周以上的文件,但我编写的脚本会删除服务器目录中的每个文件。我使用这个脚本:

#!/bin/bash

SERVER_BACKUP_DIR="/path/"
GOOGLE_DRIVE_FOLDER_ID="/path"

ONE_WEEK_THRESHOLD=$(($(date +%s) - 604800))

find "$SERVER_BACKUP_DIR" -type f -mtime +7 -exec rm {} \;

FILES=$(gdrive files list --query "'$GOOGLE_DRIVE_FOLDER_ID' in parents" | tail -n +2)

while IFS= read -r line; do
    file_id=$(echo "$line" | awk '{print $1}')
    file_modified_time=$(echo "$line" | awk '{print $3 " " $4}')

    # Convert date and time to Unix timestamp
    modified_time_seconds=$(date -d "$file_modified_time" +%s)

    if [ "$modified_time_seconds" -lt "$ONE_WEEK_THRESHOLD" ]; then
        gdrive files delete "$file_id"
    fi
done <<< "$FILES"

我怎样才能实现这一目标,尤其是谷歌驱动器?

我希望这个脚本能够完成这项工作,但它给出了错误,指出时间格式无效。似乎无法以标准时间格式从谷歌驱动器中提取备份文件的准确时间。

#!/bin/bash

SERVER_BACKUP_DIR="/path"
GOOGLE_DRIVE_FOLDER_ID="/path"

ONE_WEEK_THRESHOLD=$(($(date +%s) - 604800))

find "$SERVER_BACKUP_DIR" -type f -mtime +7 -exec rm {} \;

FILES=$(gdrive files list --query "'$GOOGLE_DRIVE_FOLDER_ID' in parents" | tail -n +2)

while IFS= read -r line; do
    file_id=$(echo "$line" | awk '{print $1}')
    file_modified_time=$(echo "$line" | awk '{print $3 " " $4}')

    # Convert date and time to Unix timestamp
    modified_time_seconds=$(date -d "$file_modified_time" +%s)

    if [ "$modified_time_seconds" -lt "$ONE_WEEK_THRESHOLD" ]; then
        gdrive files delete "$file_id"
    fi
done <<< "$FILES"
bash shell cron google-drive-api backup
1个回答
0
投票

评论:@Paul Hodges。我使用 t1 和 t2,但在执行

gdrive files list
命令

后,脚本无法从文件中检索正确的时间和日期字段

.文件命名格式

它们有两种命名格式,如上图所示。

© www.soinside.com 2019 - 2024. All rights reserved.