我创建了从数据库到谷歌驱动器的文件自动备份,并使用 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"
评论:@Paul Hodges。我使用 t1 和 t2,但在执行
gdrive files list
命令后,脚本无法从文件中检索正确的时间和日期字段
它们有两种命名格式,如上图所示。