Pertanyaan Bagaimana cara membuat sistem saya menghapus semua file dalam direktori tertentu yang lebih tua dari waktu tertentu sambil menjaga struktur direktori tetap utuh?


Saya memiliki direktori di mesin saya, menganggapnya sebagai milik saya sendiri tmp direktori, tetapi di dalam saya ~ direktori. Dan saya ingin membuatnya sehingga sistem saya setiap 3 jam menghapus semua file dalam (meskipun menjaga struktur direktori tetap utuh, tetapi masih menghapus semua file di semua tingkat direktori secara rekursif) direktori itu yang lebih tua dari satu hari.

Saya menjalankan Ubuntu GNOME 15.10 dengan GNOME 3.18, bisakah ini dilakukan? Dan jika ya, bagaimana caranya? Saya ingin ini sepenuhnya otomatis tanpa membutuhkan interaksi pengguna. Ini seharusnya menjadi sesuatu yang otomatis dimulai ketika saya masuk, jadi saya tidak perlu menjalankan sesuatu di setiap startup.


12
2017-12-15 12:58


asal




Jawaban:


Menggunakan find:

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

  • -type f hanya akan mencari file

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

  • -delete hanya akan menghapus file yang cocok (s)

Di sini tangkapannya -mtime +0, sebagian besar mungkin berpikir untuk menggunakan -mtime +1 tapi find akan mengabaikan waktu pecahan apa pun saat menghitung hari. Begitu, -mtime +1 akan mencocokkan file jika modifikasi terakhir dibuat setidaknya 2 hari yang lalu.

Mengutip man find, -mtime memiliki konvensi waktu yang sama sebagai -atime:

-atime n

File terakhir diakses n * 24 jam yang lalu. Saat mencari tahu caranya   banyak periode 24 jam yang lalu file itu terakhir diakses, apa pun             bagian pecahan diabaikan, jadi untuk mencocokkan -aku +1, file harus telah diakses setidaknya dua hari yang lalu.

Juga perhatikan bahwa jika Anda menginginkan presisi, Anda harus melihat pada -mmin opsi dari find untuk menunjukkan waktu dalam hitungan menit.

Untuk menjalankannya secara berkala setelah 3 jam, Anda dapat menambahkan a cron masuk.

Menjalankan crontab -e dan tambahkan:

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

Menggunakan zsh untuk menghapus file:

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

Menambah ke cron:

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

21
2017-12-15 19:01





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

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

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

crontab -e

Lalu di dalam crontab:

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

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

Pergi saja cron dan crontab  manpages untuk informasi lebih lanjut tentang mereka.


6
2017-12-15 13:27



Jawaban ini sebenarnya salah, silakan lihat jawaban yang lain.
Seperti jawaban ini salah, dan tidak benar-benar mengatakan apa pun selain jawaban yang lain, harap perbaiki jawaban Anda benar dan lebih baik dari jawaban yang lain, atau menghapusnya.
@ParanoidPanda Saya memahami bahwa Anda menginginkan jawaban berkualitas tinggi, tetapi berkomentar pada dasarnya hal yang sama dua kali agak tidak diperlukan dan dapat dilihat sebagai agresif, terutama untuk pengguna baru. - RPi Awesomeness
@RPiAwesomeness: Yah, 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 seperti saya hanya mengatakan bahwa mereka telah memberikan jawaban yang salah dan sekarang harus menghapusnya, jadi saya menambahkan sedikit tentang perbaikan. Tetapi saya dapat melihat bagaimana hal ini dapat dilakukan dengan cara yang salah, jadi saya meminta Anda untuk mengingat: Panda hanya menjadi agresif ketika Anda mengambil bambunya. ;-)