我有一个新要求来清除早于 30 天的 MySQL 转储文件。这些文件使用“all-mysql-YYYYMMDD-HHMM.dump”的命名约定。文件位于 SAN 挂载的文件系统上,因此恢复不是问题,但不幸的是驱动器空间有限且很快填满,因此需要频繁的人工干预。
文件名示例
我的第一个想法是在带有 -mtime +30 的批处理脚本中使用“查找”,但是,无法保证修改时间,并且一些较旧的存档可能会逃避清除日期:)
我创建了以下 BASH 脚本,但我希望有一种更简洁的方法来执行此操作。
#!/bin/bash
STARTING_DIR=$(pwd)
FILE_PREFIX=all-mysql-
BACKUP_DIR=/opt/backup/mysql/dumps
ARCHIVE_WINDOW_DAYS=30
cd $BACKUP_DIR
# Create YYYYMMDD datestamp for Today - $ARCHIVE_WINDOW_DAYS
ARCHIVE_WINDOW_IN_SECS=$(echo "$(date +%s) - (${ARCHIVE_WINDOW_DAYS} * 86400)" | bc)
PURGE_BEFORE_DATE=$(date -d @${ARCHIVE_WINDOW_IN_SECS} +%Y%m%d)
for backup_file in $FILE_PREFIX*
do
# Trim prefix, time portion of date stamp, and file extension
# from $backup_file to allow numeric comparison against YYYYMMDD
backup_trim_tmp=${backup_file#${FILE_PREFIX}}
backup_trimmed=${backup_trim_tmp%-****.dump}
if [ ${PURGE_BEFORE_DATE} -gt ${backup_trimmed} ]
then
rm $backup_file
fi
done
cd $STARTING_DIR
Run Code Online (Sandbox Code Playgroud)
另一种删除除最后 30 个文件之外的所有文件的方法:
rm $(ls -r | tail -n +31)
Run Code Online (Sandbox Code Playgroud)
或者这是原始帖子中脚本的较短版本:
cd /opt/backup/mysql/dumps
d=$(date -r $(($(date +%s)-30*86400)) +%Y%m%d)
for f in all-mysql-*; do
[[ ${f#all-mysql-} < $d ]] && rm $f
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1407 次 |
最近记录: |