Hapus cadangan yang lebih lama dari 7 hari kecuali pertama setiap bulan

0

Saya ingin menghapus cadangan yang lebih lama dari 7 hari tetapi pertahankan yang pertama setiap bulan.

Nama file adalah: name_$(date +\%d\%m\%Y).tar.gz

Saya ingin tetap: name_$(date +\01\%m\%Y).tar.gz

Saya ingin sesuatu seperti ini:

find /path -mtime +8 -exec rm {} \;

Di mana saya bisa masuk name_$(date +\01\%m\%Y).tar.gz?

Mungkin menggunakan --exclude name_$(date +\01\%m\%Y).tar.gz

Saya mencari perintah satu baris.

Tidak ingin subdirektori.

Mencoba dengan gema tidak berfungsi dengan baik tetapi menunjukkan sesuatu dari 01.

yang --excludetidak berfungsi:command not found

tamu
sumber
Bagaimana scripting keluar langkah dari "file kiper" yang memiliki "01" karakter dalam nama file ke sub-folder pertama tepat di bawah di mana semua lain yang menjadi non-rekursif dibersihkan setelah usia tertentu seperti /01Monthly, /BackupsRetained, dll dan kemudian memiliki logika Anda yang lain melakukan sisanya tanpa pengecualian atau --excludeberalih? Dengan cara ini 01file Anda selalu bergerak terlebih dahulu per skrip yang sama yang membersihkan dan mereka selalu di sub-folder "standar" lainnya di dalam folder root yang sama daripada Anda membersihkan file lama 7 hari dari hanya dalam folder itu dan tidak secara rekursif.
GambleNerd
Tidak berhasil --exclude name_01*.tar.gz? Cobalah dengan echoalih - alih rmsebelumnya ... :)
Hastur
1
Saya pikir yang Anda inginkan adalah sesuatu seperti -prune -o -name 'name_01 * .tar.gz' stackoverflow.com/questions/5659516/…
Paul

Jawaban:

2

Ini berfungsi untuk saya di bawah Debian / Ubuntu (dan paling banyak berfungsi):

Misalnya jika Anda memiliki file yang bertanggal dalam format berikut:

mybackup_ 12-01-2015 .tar.gz

 $ find ./* -name 'mybackup_??-01-*' -prune -o -mtime +7 -exec ls {} \;

Perintah:

  • Temukan semua file mulai dari folder saat ini
  • Pangkas (mengabaikan / mengecualikan) file dengan tanggal '01' yang cocok
  • dan hanya termasuk file ≥7 hari (mtime)
  • Jalankan lsuntuk menunjukkan apa yang tersisa.

Jika Anda ingin menghapusnya setelah perintah pengujian, cukup ganti lsdengan rm.

Ketika Anda senang dengan perintah, itu juga berfungsi dengan baik sebagai tugas / pekerjaan cron. Saya memilikinya menjalankan skrip saya setiap dua bulan sekali. (skrip saya menggunakan mtime +90 hari untuk membersihkan backup mysql)

bshea
sumber