Saya perlu membuat cadangan data dan mengonfigurasi file di server ini, setiap hari. Saya perlu menjaga:
- backup harian selama seminggu
- backup mingguan selama sebulan
- backup bulanan selama satu tahun
- backup tahunan setelah itu
Semua ini dilakukan melalui skrip shell yang dijalankan setiap hari dari cron.
Beginilah tampilan file cadangan setelah 10 tahun berjalan:
blog-20050103.tar.bz2
blog-20060102.tar.bz2
blog-20070101.tar.bz2
blog-20080107.tar.bz2
blog-20090105.tar.bz2
blog-20100104.tar.bz2
blog-20110103.tar.bz2
blog-20120102.tar.bz2
blog-20130107.tar.bz2
blog-20130902.tar.bz2
blog-20131007.tar.bz2
blog-20131104.tar.bz2
blog-20131202.tar.bz2
blog-20140106.tar.bz2
blog-20140203.tar.bz2
blog-20140303.tar.bz2
blog-20140407.tar.bz2
blog-20140505.tar.bz2
blog-20140602.tar.bz2
blog-20140707.tar.bz2
blog-20140728.tar.bz2
blog-20140804.tar.bz2
blog-20140811.tar.bz2
blog-20140816.tar.bz2
blog-20140817.tar.bz2
blog-20140818.tar.bz2
blog-20140819.tar.bz2
blog-20140820.tar.bz2
blog-20140821.tar.bz2
blog-20140822.tar.bz2
Jawaban:
Anda benar-benar rekayasa berlebihan ini. Sangat.
Inilah beberapa pseudocode:
daily
direktoridaily
cadangan terakhirweekly
direktoriweekly
backup terakhirmonthly
direktorimonthly
cadangan terakhiryearly
direktoriJumlah logika yang harus Anda implementasikan hampir sama, eh? CIUMAN.
Ini terlihat lebih mudah:
Atau, berdasarkan jumlah file, bukan berdasarkan usia:
sumber
Jika Anda hanya ingin menyimpan, misalnya, 8 cadangan harian dan 5 cadangan mingguan (setiap minggu), kerjanya seperti ini:
Mulai hari ini (2014-11-10), ini akan menampilkan:
Sebagai latihan yang tersisa untuk Anda, Anda hanya perlu menghapus semua file cadangan yang namanya tidak muncul di
keep
-array.Jika Anda ingin menyimpan 13 backup bulanan (minggu pertama setiap bulan) dan 6 backup tahunan (minggu pertama setiap tahun), hal-hal menjadi sedikit lebih rumit:
Mulai hari ini (2014-11-10), ini akan menampilkan:
Sama seperti di atas, cukup hapus semua file cadangan yang tidak ditemukan dalam array ini.
sumber
rm /dir/*.* except keep[@]
?Seperti disebutkan dalam komentar, biasanya lebih baik untuk mendelegasikan tugas mengelola cadangan ke perangkat lunak manajemen cadangan.
Tapi di sini ada logika di bash untuk menghapus cadangan yang lebih lama sesuai kebutuhan Anda
Kode PHP menunjukkan file mana yang akan tetap setelah berjalan selama 3520 hari
https://ideone.com/n2ymQy
sumber