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?
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:
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
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 .
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 .
/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).
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 .
rm -fsuretle kaynaklanabilecek olası yarış durumu ele sessizce hataları işlemez -exec?
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.
tmpwatchçatallara ayrıldı tmpreaper, (en azından Debian'da) yerine geçtiği anlaşılıyor.
/a/b/c/Her bir seçenek için ana dizini ve sonra alt dizinleri belirtmenin bir yolu var mı ?