Bagaimana membuat sistem saya menghapus semua file dalam direktori tertentu lebih lama dari waktu tertentu sambil menjaga struktur direktori tetap utuh?

12

Saya memiliki direktori di komputer saya, anggap saja itu semacam tmpdirektori saya sendiri , tetapi ada di ~direktori saya . Dan saya ingin membuatnya agar sistem saya setiap 3 jam menghapus semua file (meskipun menjaga struktur direktori tetap utuh, tetapi masih menghapus semua file di semua level direktori secara rekursif) direktori yang lebih lama dari satu hari.

Saya menjalankan Ubuntu GNOME 15.10 dengan GNOME 3.18, dapatkah ini dilakukan? Dan jika demikian, bagaimana? Saya ingin ini sepenuhnya otomatis tanpa diperlukan interaksi pengguna. Ini seharusnya sesuatu yang dimulai secara otomatis ketika saya masuk, jadi saya tidak perlu menjalankan sesuatu di setiap startup.


sumber

Jawaban:

21

Menggunakan find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp adalah direktori yang akan dicari secara rekursif, ubahlah sesuai ini

  • -type f akan mencari hanya file

  • -mtime +0 yang akan cocok dengan file jika terakhir diubah satu hari atau lebih yang lalu

  • -delete hanya akan menghapus file yang cocok

Di sini masalahnya adalah -mtime +0, sebagian besar mungkin berpikir untuk menggunakan -mtime +1tetapi findakan mengabaikan waktu fraksional saat menghitung hari. Jadi, -mtime +1akan cocok dengan file jika modifikasi terakhir dilakukan setidaknya 2 hari yang lalu.

Mengutip man find, -mtimememiliki konvensi waktu yang sama dengan -atime:

-atime n

File terakhir diakses n * 24 jam yang lalu. Ketika menemukan angka berapa periode 24 jam yang lalu file terakhir diakses, setiap bagian fraksional diabaikan, sehingga untuk mencocokkan -atime +1, file harus diakses setidaknya dua hari yang lalu.

Perhatikan juga bahwa jika Anda menginginkan presisi, Anda harus melihat -mminopsi finduntuk menunjukkan waktu dalam hitungan menit.

Untuk menjalankannya secara berkala setelah 3 jam, Anda dapat menambahkan cronentri.

Jalankan crontab -edan tambahkan:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

Menggunakan zshuntuk menghapus file:

rm ~/tmp/**/*(.-m+0)

Menambahkan ke cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'
heemayl
sumber
6

Anda harus dapat menghapus semua file yang lebih lama dari 1 hari /home/username/directorydan semua direktori di bawahnya dengan:

find /home/username/directory -type f -mtime +1 -delete

Dan untuk menjadwalkan perintah itu setiap tiga jam, tentukan itu sebagai tugas cron:

crontab -e

Kemudian di dalam crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Yang menjalankan perintah Anda setiap tiga jam pada jam tersebut (yaitu menit 0), jadi jam 3:00 pagi, jam 6:00 pagi, dll.

Pergi crondan crontab manpagesuntuk informasi lebih lanjut tentang mereka.

Limecat
sumber
4
Jawaban ini sebenarnya salah, silakan lihat jawaban yang lain .
4
Karena jawaban ini salah , dan tidak benar-benar mengatakan apa pun selain jawaban yang lain, harap tingkatkan jawaban Anda sehingga jawaban itu benar dan lebih baik daripada jawaban yang lain, atau hapus.
5
@ParanoidPanda Saya mengerti bahwa Anda menginginkan jawaban yang berkualitas tinggi, tetapi mengomentari hal yang sama dua kali pada dasarnya tidak dibutuhkan dan dapat dianggap agresif, terutama untuk pengguna baru.
RPiAwesomeness
2
@RPiAwesomeness: Ya, saya berkomentar untuk kedua kalinya karena saya kehabisan waktu untuk mengedit komentar pertama saya, dan saya juga ingin mengatakan bahwa mereka harus menghapus jawaban mereka yang mungkin bukan sesuatu yang perlu dipahami dari komentar pertama saya, meskipun saya tidak ingin mereka merasa diserang dan sepertinya saya hanya mengatakan bahwa mereka telah memberikan jawaban yang salah dan sekarang harus menghapusnya, jadi saya menambahkan sedikit tentang perbaikan. Tapi saya bisa melihat bagaimana ini bisa diambil dengan cara yang salah, jadi saya meminta Anda untuk mengingat: Panda hanya menjadi agresif ketika Anda mengambil bambu. ;-)