Saya seorang noob yang lengkap di linux tetapi saya mulai mengerti. Saya memiliki Ubuntu Server 16.04 yang menjalankan server FTP untuk membuat cadangan file video keamanan. File-file akan disimpan dalam folder seperti: /home/securityfolder1
, /home/securityfolder2
, /home/securityfolder3
dan sebagainya.
Perhatikan bahwa masing-masing securityfolderN
adalah pengguna yang berbeda.
Karena saya tidak ingin hard drive saya penuh sepanjang waktu, saya ingin menghapus file yang lebih lama dari 7 hari di folder ini setiap hari.
files
cron
delete
automation
Jacco van de Wijgaart
sumber
sumber
/home
biasanya berisi subfolder untuk setiap pengguna. Jika Anda tidak ingin menyimpan cadangan Anda sebagai pengguna yang berbeda (bukan ide yang sangat bagus), Anda harus mempertimbangkan lokasi lain, misalnya/home/security/backup1
dan seterusnya.Jawaban:
Pertama, perintah ini akan menemukan dan menghapus semua file yang lebih lama dari 7 hari di subdirektori mana pun
/home
yang namanya dimulai dengansecurityuser
:Anda perlu
-mtime +6
dan bukan+7
karena-mtime
menghitung periode 24jam. Seperti yang dijelaskan di-atime
bagianman find
(-mtime
bekerja dengan cara yang sama):Jadi, untuk menemukan file yang diubah 7 hari atau lebih yang lalu, Anda perlu menemukan file yang dimodifikasi lebih dari 6 hari yang lalu
-mtime +6
.Langkah selanjutnya adalah menjalankan perintah ini sekali sehari. Karena masing
securityuserN
- masing adalah pengguna yang berbeda (Anda mungkin ingin memikirkan kembali pengaturan itu, itu membuat semuanya lebih rumit), ini harus dijalankan sebagai root. Jadi, edit/etc/crontab
:Dan tambahkan baris ini:
Itu akan menjalankan
find
perintah sekali sehari dan menghapus file.sumber
find '/home/securityuser/*' -mtime +6 -type f -delete
(dengan semua perubahan yang terkait dan sesuai dalam pembuatan pengguna) umumnya merupakan ide yang lebih baik daripadafind '/home/securityuser*' -mtime +6 -type f -delete
(tanpa garis miring) ...?/home/securityuserN
, jadi tanpa slash, mereka tidak akan ditemukan.-name
:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
'securityuser*'
. Wildcard harus diperluas oleh shell, bukan olehfind
, jadi seharusnyasecurityuser*
(tanpa tanda kutip). Lihat jawaban yang diperbarui. Terima kasih telah menunjukkannya, Stelio, aku tidak percaya tidak ada yang memperhatikan sebelumnya! Vlakas Ti!sesuai pengetahuan saya:
coba
find
perintah seperti ini:sumber
find /home/jacco/ -mtime +1 -type f -delete
dan sepertinya berhasil. Bagaimana saya mengotomatisasi ini?#!/bin/bash
dan kode di bawahnya? atau apakah saya benar-benar bodoh di sini?find '/u*' -name local
. Arahan seperti-name "foo*"
itu harus dikutip ketika mengandung karakter glob.