Sistemimin, dizin yapısını değiştirmeden belirli bir dizindeki tüm dosyaları belirli bir süreden daha eski silmesini nasıl sağlayabilirim?


12

Makinemde bir dizin var, bunu kendi dizinim gibi düşünün tmp, ama ~dizinimde. Ve her 3 saatte bir sistemimin tüm dosyaları silmesini (herhangi bir dizin yapısını koruyarak, ancak yine de dizinlerin tüm düzeylerindeki tüm dosyaları yinelemeli olarak silmelerini) bir günden eski olan dizini yapmak istiyorum.

GNOME 3.18 ile Ubuntu GNOME 15.10 kullanıyorum, bu yapılabilir mi? Ve eğer öyleyse, nasıl? Bunun hiçbir kullanıcı etkileşimi gerektirmeden tam otomatik olmasını istiyorum. Bu, giriş yaptığımda otomatik olarak başlatılan bir şey olmalı, bu yüzden her başlangıçta bir şey çalıştırmam gerekmiyor.

Yanıtlar:


21

Kullanma find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp özyinelemeli olarak aranacak dizin, buna göre değiştirin

  • -type f sadece dosyaları arayacak

  • -mtime +0 en son bir gün veya daha önce değiştirilmişse bir dosyayla eşleşecek

  • -delete sadece eşleşen dosyaları kaldıracak

Burada yakalama -mtime +0, çoğu kullanmayı düşünebilir, -mtime +1ancak findgünleri hesaplarken herhangi bir kesirli zamanı göz ardı edecektir. Dolayısıyla, -mtime +1son değişiklik en az 2 gün önce yapılmışsa bir dosyayla eşleşir.

Alıntı yapmak man find, -mtimeşu zamanlama kuralına sahiptir -atime:

-atime n

Dosyaya en son 24 saat önce erişildi. Bul, dosyaya en son kaç saatlik 24 saat önce erişildiğini anladığında, kesirli kısımlar yok sayılır, bu nedenle -atime +1 ile eşleşmek için en az iki gün önce bir dosyaya erişilmiş olmalıdır.

Ayrıca, doğruluk istiyorsanız, zamanı dakika cinsinden belirtme -mminseçeneğine de bakmanız gerektiğini unutmayın find.

3 saat sonra periyodik olarak çalıştırmak için bir crongiriş ekleyebilirsiniz .

Çalıştır crontab -eve ekle:

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

zshDosyaları kaldırmak için kullanma :

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

Ekleniyor cron:

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

6

1 günden eski tüm dosyaları /home/username/directoryve altındaki tüm dizinleri silebilirsiniz :

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

Ve bu komutu her üç saatte bir planlamak için onu bir cron işi olarak ayarlayın:

crontab -e

Sonra crontab'ın içinde:

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

Komutunuzu her üç saatte bir (yani dakika 0), yani saat 3:00, 6:00 vb.

cronVe hakkında crontab manpagesdaha fazla bilgi için gidin .


4
Bu cevap aslında yanlış, lütfen diğer cevaba bakınız .

4
Bu cevap yanlış olduğundan ve aslında diğer cevaptan başka bir şey söylemediğinden, lütfen cevabınızı diğer cevaptan daha doğru ve daha iyi olacak şekilde geliştirin veya silin.

5
@ParanoidPanda Yüksek kaliteli cevaplar istediğinizi anlıyorum, ancak aslında aynı şeyi iki kez yorumlamak gereksizdir ve özellikle yeni bir kullanıcı için agresif olarak görülebilir.
RPiAwesomeness

2
@RPiAwesomeness: İkinci kez yorum yaptım çünkü ilk yorumumu düzenlemek için zamanım kalmamıştı ve ben de ilk yorumumdan anlaşılması gereken bir şey olmayan cevaplarını silmeleri gerektiğini söylemek istedim. Saldırı altında hissetmelerini istemiyordum ve sadece yanlış cevap verdiklerini söylediler ve şimdi silmeleri gerekiyor, bu yüzden iyileştirme hakkında biraz ekledim. Ancak bunun nasıl yanlış bir şekilde alınabileceğini görebiliyorum, bu yüzden hatırlamanızı istiyorum: Bir Panda sadece bambularını aldığında agresifleşir. ;-)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.