Böyle bir şey denemek isteyebilirsiniz:
find /tmp -mtime +7 -and -not -exec fuser -s {} ';' -and -exec echo {} ';'
find, belirli ölçütlerle eşleşen dosyaları bulmak için kullanılır.
-mtime +7
sadece 7 günden daha eski dosyaları seçer (başka bir değer kullanabilirsiniz)
-exec fuser -s {} ';'
eskilik ölçütlerine uyan her dosya için füzeri sessiz modda çağırır. fuser, şu anda erişilen her dosya için 0 (= true) ve erişilmeyen dosyalar için 1 (= false) döndürür. Sadece erişilemeyenlerle ilgilendiğimiz için bunun -not
önüne-exec
-exec echo {} ';'
ölçütlerle eşleşen tüm dosya adlarını yazdırmanız yeterlidir. -exec rm {} ';'
burada kullanmak isteyebilirsiniz , ancak bu hala kullanımda olan bazı dosyaları silebileceğinden, önce basit bir yankı yapmak daha güvenli olur.
- edit: Kazara etkileri önlemek için temizleme gibi efektleri belirli dosya desenleri veya kullanıcı kimlikleriyle sınırlamak
-name 'foo*.bar'
veya -uid 123
kısıtlamak isteyebilirsiniz .
Son noktaya kadar: Yalnızca bir kez yazılan (örneğin sistem önyüklemesinde) ancak sık sık (örneğin herhangi bir X-oturumu-çerezi) yazılan dosyalar olabileceğini düşünün. Bu nedenle, yalnızca hatalı programlarınız tarafından oluşturulan dosyaları etkilemek için bazı ad denetimleri eklemenizi öneririz.
edit2:
Son sorunuza: Hiçbir işlem için açık bir tanıtıcı olmadıkça (en azından yerel linux dosya sistemleri için) bir dosya diskten silinmez. Sorun, dizin girdisinin hemen kaldırılmasıdır; bu, dosyayı kaldırdığınız andan itibaren yeni işlemlerin artık dosyayı açamayacağı anlamına gelir (dosya adı eklenmediğinden).
Ayrıntılar için bkz.
Https://stackoverflow.com/questions/3181641/how-can-i-delete-a-file-upon-its-close-in-c-on-linux
edit3: Peki ya bütün süreci otomatikleştirmek istersem?
Dediğim gibi, bir kez yazılan ve sonra arada bir okunan dosyalar olabilir (örneğin, X oturum çerezleri, PID dosyaları, vb.). Bunlar bu küçük kaldırma komut dosyası tarafından hariç tutulmayacak (bu yüzden echo
dosyaları silmeden önce ilk önce bir test çalıştırması yapmak isteyebilirsiniz ).
Güvenli bir çözüm uygulamanın bir yolu kullanmaktır atime
.
atime
her dosyanın en son erişildiği zamanı saklar. Ancak bu dosya sistemi seçeneği genellikle devre dışıdır çünkü performans etkisi oldukça fazladır ( bu blog'a göre % 20-30 bölgedeki bir yere göre ). Var relatime
, ancak erişim zamanı mtime
değiştiğinde yazar , bu yüzden bu bize yardımcı olmaz.
Kullanmak istiyorsanız , tüm sistem üzerindeki performans etkisinin çok büyük olmaması için ayrı bir bölüme (ideal olarak bir ramdisk) atime
sahip olmanızı öneririm /tmp
.
atime
Etkinleştirildikten sonra , tek yapmanız gereken -mtime
yukarıdaki komut satırındaki parametreyi değiştirmek -atime
.
Bunu kaldırabilirsiniz -not -exec fuser -s {} ';'
, ancak emin olmak için orada saklıyorum (uygulamaların dosyaları uzun süre açık tutması durumunda).
Ancak echo
sisteminizin hala ihtiyaç duyduğu şeyleri kaldırmadan önce komutu kullanarak test etmeyi unutmayın !