Bingung dengan perintah `find` ini dalam skrip Bash?

8

Saya memiliki skrip bash, dibuat oleh seseorang yang tidak lagi dapat menjelaskan artinya, yang digunakan untuk TAR otomatis folder dan mencadangkannya. Saat ini saya bingung dengan baris terakhir:

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

Script lengkapnya ada di bawah ini.

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END
MODS Hapus Akun
sumber
3
Tidak ada pertanyaan tindak lanjut, satu pertanyaan per pertanyaan. Anda dapat mengajukan pertanyaan sebanyak yang Anda suka. Karena itu klik ajukan pertanyaan, lalu ajukan pertanyaan lain, jangan tambahkan ke bagian bawah yang lain.
ctrl-alt-delor

Jawaban:

11

The findperintah akan menghapus file biasa di atau di bawah /home/_backups/pokebrawldirektori yang berusia lebih dari tujuh hari (atau lebih tepatnya, tidak dimodifikasi dalam minggu terakhir).

Ini harus mungkin membaca

find "$DESDIR" -mtime +6 -type f -delete

atau

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

karena sudah ada variabel yang memegang nama direktori dengan sangat baik. Variasi kedua akan menyebabkan kesalahan jika DESDIRkarena alasan tertentu kosong atau tidak disetel.

Saya berasumsi ini adalah cara hanya menyimpan cadangan minggu lalu. Saya akan menyarankan menggunakan sesuatu seperti borgbackupatau resticsebagai gantinya, karena ini akan dapat menyimpan cadangan lebih lama tanpa menggunakan lebih banyak ruang (bahkan cadangan per jam selama setahun tidak akan memakan banyak ruang sama sekali jika data tidak banyak berubah) . Mereka melakukan deduplikasi data dan borgbackupjuga mendukung kompresi (keduanya mendukung backup jarak jauh dan enkripsi juga).

Untuk menjalankan skrip setiap 24 jam (tengah malam), gunakan tugas cron.

Pertama, berikan perintah crontab -e. Ini akan membuka editor dengan crontab saat ini untuk pengguna aktif (ini mungkin atau mungkin bukan file kosong).

Kemudian tambahkan

@daily /path/to/the/script.sh

(di mana path/to/the/script.shpathname dari skrip).

Simpan dan keluar dari editor.

Naskahnya sekarang akan dipanggil tengah malam, bahkan malam hari.

Apakah Anda ingin menjalankan skrip di, katakanlah, 13:30 setiap sore, tambahkan yang berikut sebagai entri crontab:

30 13 * * * /path/to/the/script.sh

Lihat manual crontab di sistem Anda untuk detail tentang cara menulis jadwal crontab ( man 5 crontab).

Kusalananda
sumber
1
Pada aspek Ini mungkin harus membaca aspek: Saya telah melihat beberapa skrip sengaja menghindari menggunakan variabel lingkungan ketika melakukan jenis find/ deleteoperasi ini, dalam kasus beberapa doofus lupa untuk mengatur $DESDIRatau mengaturnya ke "/" atau karena kesalahan.
steve
@steve Yah, jika DESDIRdiubah dan findperintah tidak diperbarui, itu akan gagal untuk membersihkan direktori yang benar. Mungkin akan bermanfaat jika menggunakan ${DESDIR:?Not set correctly}atau yang serupa.
Kusalananda
5
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

Ini menemukan semua file dalam direktori /home/_backups/pokebrawlyang belum dimodifikasi pada +6hari-hari terakhir dan menghapusnya. CATATAN: +6sama dengan 7 hari.

Lihat man finduntuk melihat bagaimana switch ini bekerja:

$ man find
...
   -mtime n
          File's data was last modified n*24 hours ago.  See the comments 
          for -atime to understand how rounding affects the interpretation 
          of file modification times.

Pada distro Redhat Anda cukup meletakkan skrip ini di direktori /etc/crondailydan itu akan berjalan setiap hari. Anda dapat melihat bahwa ada skrip lain di sana yang dapat Anda gunakan sebagai contoh:

$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug  1  2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron
-rwx------. 1 root root 208 Nov  4  2016 mlocate
slm
sumber