Saya memiliki persyaratan baru untuk membersihkan file dump MySQL yang lebih lama dari 30 hari. File-file menggunakan konvensi penamaan "all-mysql-YYYYMMDD-HHMM.dump". File-file tersebut terletak pada sistem file yang dipasang di SAN, jadi pemulihan tidak menjadi masalah, tetapi sayangnya ruang drive terbatas dan terisi dengan cepat sehingga membutuhkan intervensi manusia yang sering.
Contoh nama file
- all-mysql-20130324-2330.dump
- all-mysql-20130325-2330.dump
- all-mysql-20130326-2330.dump
Pikiran pertama saya adalah menggunakan "find" di dalam skrip batch dengan -mtime +30, namun, waktu modifikasi tidak dapat dijamin dan beberapa arsip lama dapat menghindari tanggal pembersihan :)
Saya membuat skrip BASH berikut, tetapi saya berharap ada cara yang lebih bersih untuk melakukan operasi ini.
#!/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
logrotate
solusi yang lebih bersih?Jawaban:
Cara lain untuk menghapus semua kecuali 30 file terakhir:
Atau di sini adalah versi yang lebih pendek dari skrip di pos asli:
sumber
Jika Anda ingin menghapus semua kecuali 30 file terakhir:
Itu akan memenuhi persyaratan Anda asalkan ada satu cadangan per hari, dan skema penamaan tetap seperti itu (yaitu urutan alfabet = urutan kronologis, tidak ada spasi dalam nama file).
Anda secara khusus meminta satu kalimat di salah satu komentar Anda. Secara pribadi saya lebih suka menulis hal-hal. Liner satu ini sedikit di sisi berbahaya (jika sed gagal, semuanya dihapus).
sumber