X günden eski dosyaları otomatik silme - Teknoloji Güncesi
Linux

X günden eski dosyaları otomatik silme

Linux sistemlerde Find komutu ile başlıkta yer alan işlemi yapmak çok kolay. Öncelikle belli bir günden daha eski dosyaları ne için silmek istiyoruz. Bunun bir çok nedeni olabilir, günü geçmiş arşivlerinizi temizlemek, yedekleme amacıyla kullandığınız dosyaların artık fazla yer tutmaya başlaması vs. gibi birçok neden Linux sisteminizde (bu herhangi bir sunucu da olabilir bilgisayarınızda) belli bir günden daha eski dosyalarınızı silme gerekçeleriniz arasında sayılabilir.  Aslında geçenlerde sınırlı kapasiteye sahip bir vps kurulumu gerçekleştirdim ve, kullandığım vps panelinin orijinalinde olmayan bazı özellikleri eklerken bunu da eklemem gerekti. Aşağıda açıklaması yapılan basit komut ile linux da eski dosyaları silme işlemini gerçekleştirebilirsiniz. Aynı işlemi Windows sistemlerde Powershell deki komutlar yardımıyla yapmanızda mümkün, yazının en sonun da Powershell örnek kodlarını bulabilirsiniz.

Vps yönetim paneli aldığı yedekleri uzak sunucuya yedekliyor ve yerel yedekleri de bir hafta kadar saklamaya ayarlıydı ancak oluşturduğu yedeklerin geçici dosyaları sunucuda hala saklanmaya devam ediyordu. Bu nedenle günü geçen dosyaların silinmesi için basit bir shell script yazdım ve içerisine de bu komutu girdim.

 

Komut Sentaksı

find /dosya/yolu -mtime +5 -exec rm {} \;

Lütfen dikkat rm, {}, ve \ aralarında birer boşluk var.

Açıklama

  • Komuttaki ilk parametre dosyaların yolu. Bu bir yol, bir dizin veya  örnekte gibi joker karakter olabilir. Önerim her zaman tam yolu girmeniz ve exec rm komutunu kullanmadığınızdan emin olun.
  • İkinci parametre -mtime kaç günden eski olduğunu belirtiyor +5 koyduğumuzda 5 günden eski dosyalar üzerinde işlem yapacaktır.
  • 3. parametre -exec ise yeni bir komutu çalıştırmanızı yani rm komutunu çalıştırmanızı sağlıyor ve {} \ ise komutun bittiğini belirtmek için gerekli.

Bu komutu isterseniz biraz daha süsleyebilirsiniz. Mesela

find /dosya/yolu -mtime +5 -size +1G -exec rm {} \;

yukarıdaki şekilde yazarsanız 1GB dan büyük dosyalar için işlem yapacaktır. +1G yerine 50M gibi yani 50MB üzeri dosyalar için gerekli komutun çalıştırılması sağlanabilir.

Tam istediğiniz sonucu verdiğinden emin olmak için önce

find /dosya/yolu -mtime +5 -size +1G

komutunu çalıştırın, bu komut sadece kriterlerimize uyan dosyaları gösterecektir. Böylece istenmeyen bir sonuçla karşılaşmamış olursunuz.

Bu komut Ubuntu, Suse,Redhat (doğal olarak CentOS) ve birçok linux sürümünde gayet sağlıklı bir şekilde çalışıyor. İlerleyen günlerde linux sistemler için otomatik ftp yedekleme yapan ve yerel yedekleri belli aralıklarla kontrol edip silen shell scripti bulabilirsiniz.

Konuyla ilgili olarak Windows powershell aracılığı eski dosyaları nasıl sileriz diyorsanız işte size gerekli kodlar:

Windows Powershell Örneği

$limit = (Get-Date).AddDays(-5)
$path = "C:\Dizin\Yolu"

# $limit ile belirtilen dosyaları sil
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

# Eski dosyalar silindikten sonra kalan boş klasörleri de sil
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

 

Harun Kocaman

Baba Matematikçi ve Bilgisayar ve Bilişim Yüksek Mühendisi

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu