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 -delete
emin 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/sh
dosyanın üst satırına ekleyin ve çalıştırılabilir hale getirin chmod a+x
) oluşturun, sonra veya cron
gibi 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, -delete
seç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,-execdir
bu 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 bash
yapabilirsin /a/b/c/{1,2}
. Elbette o zaman bir betiğin patlaması olmalı #!/bin/bash
ya 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
, bash
Ve zsh
ayrı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, -execdir
bu güvenlik açıklarına karşı hafifletici olanlara da sahiptir .
rm -f
suretle 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ı ?