3 günden daha eski dosyaları silmek için Cron işi


21

3 günden eski dosyaları bir cron işi ile 3 farklı dizinde silmem gerekiyor. (bu 3 dizin bir ana dizinin çocuklarıdır /a/b/c/1& /a/b/c/2& /a/b/c/3) Bu crontab'daki bir satırla yapılabilir mi?

Yanıtlar:


26

Bu yeterince kolaydır (bunun bir oluşturma zamanının yalnızca özel araçlarla belirli dosya sistemlerinde mevcut olması nedeniyle, 3 günden daha uzun bir değişiklik süresine bağlı olduğunu unutmayın):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Kaldır #önce -deleteemin o kaldırmak istediğiniz dosyaları bulmasını kez.

Cron tarafından çalıştırılmasını sağlamak için, muhtemelen sadece çalıştırılabilir bir komut dosyası (bir shebang - #!bin/shdosyanın üst satırına ekleyin ve çalıştırılabilir hale getirin chmod a+x) oluşturun, sonra veya crongibi uygun bir dizine koyun . Elbette daha spesifik bir programa ihtiyacınız olmadığından ve bu dizinlerin dağıtımınızda bulunduğundan sağlanır./etc/cron.daily/etc/cron.weekly

Güncelleştirme

Aşağıda belirtildiği gibi, -deleteseçeneği findçok taşınabilir değil. POSIX uyumlu bir yaklaşım şöyle olacaktır:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

#Doğru dosyalara sahip olduğunuzdan emin olduğunuzda tekrar kaldırın .

Update2

Stéphane Chazelas'tan alıntı yapmak için aşağıdaki yorum yaz :

(Uygun olan yerlerde) sahip olmayan -exec rm {} +ırk durumu açıkları olduğunu unutmayın -delete. Bu yüzden başkaları tarafından yazılabilen dizinlerde kullanmayın. Bazı buluntular, -execdirbu güvenlik açıklarına karşı hafifletici olanlara da sahiptir .


Teşekkürler! /a/b/c/Her bir seçenek için ana dizini ve sonra alt dizinleri belirtmenin bir yolu var mı ?
KingKongFrog

Tabii ki, bir POSIX kabuğunda yapabilirsiniz /a/b/c/[12], ancak bu yalnızca alt dizinlerin tek harfli isimleri varsa gerçekten uygundur. İçinde bashyapabilirsin /a/b/c/{1,2}. Elbette o zaman bir betiğin patlaması olmalı #!/bin/bashya da crontab kullanıyorsanız, kullanmak üzere yapılandırıldığından emin olmanız gerekir bash(eğer değilse, değiştirmeyi gerçekten önermiyorum).
Graeme

2
ayraç genişlemesi bir csh özelliğidir ve aynı zamanda ksh, bash, zsh ve balık tarafından da desteklenir, böylece geniş bir kabuk seçeneği vardır. ksh, bashVe zshayrıca onların Neználkovo içinde münavebe operatörümüz var. (Uygun olan yerlerde) sahip olmayan -exec rm {} +ırk durumu açıkları olduğunu unutmayın -delete. Bu yüzden başkaları tarafından yazılabilen dizinlerde kullanmayın. Bazı buluntular, -execdirbu güvenlik açıklarına karşı hafifletici olanlara da sahiptir .
Stéphane Chazelas

Does rm -fsuretle kaynaklanabilecek olası yarış durumu ele sessizce hataları işlemez -exec?
Acumenus


9

Kullanarak çok daha iyi olurdu tmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.

2
tmpwatchçatallara ayrıldı tmpreaper, (en azından Debian'da) yerine geçtiği anlaşılıyor.
Jaap
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.