Ömercan Kuyumcu

Sonradan hatırlamak için yazdıklarım ..

Yedeklemeler için Basit bir PowerShell Scripti


Selam arkadaşlar! Bugün size, dosyalarınızı yedeklemek için kullanabileceğiniz basit ama bir o kadar da faydalı bir PowerShell scriptinden bahsedeceğim. Hem de öyle bir script ki, sadece değişen dosyaları yakalıyor ve hatta isterseniz her değişikliği ayrı bir versiyon olarak saklıyor. Masaüstünde duran o önemli Word dosyasını yanlışlıkla silmekten korkuyorsanız ya da “Ya bu dosyayı eski haline döndürmem gerekirse?” diyorsanız, bu yazı tam size göre!

Neden PowerShell?

Birkaç satır kodla, dosyalarınızı düzenli bir şekilde yedekleyebilir, üstelik bunu tamamen kendi ihtiyaçlarınıza göre özelleştirebilirsiniz. Ben de kendi masaüstümdeki “Esas” klasörümden “Yedek” klasörüme dosyaları nasıl taşıdığımı anlatacağım.

Diyelim ki elimde C:\Users\omer\Desktop\Esas diye bir klasör var ve buradaki dosyaları C:\Users\omer\Desktop\Yedek klasörüne yedeklemek istiyorum. Ama şöyle bir şey: Her seferinde tüm dosyaları kopyalamak istemiyorum. Mesela bir Word dosyasını açtım, iki satır ekledim, kaydettim; sadece o değişen dosyayı yedeklesin yeter. İşte bunun için şöyle bir kod yazdım:

# Kaynak ve hedef klasör yollarını tanımla
$kaynakKlasor = "C:\Users\omer\Desktop\Esas"
$hedefKlasor = "C:\Users\omer\Desktop\Yedek"

# Hedef klasör yoksa oluştur
if (-not (Test-Path -Path $hedefKlasor)) {
    New-Item -Path $hedefKlasor -ItemType Directory -Force
}

# Kaynak klasördeki tüm dosyaları al
$kaynakDosyalar = Get-ChildItem -Path $kaynakKlasor -File

foreach ($dosya in $kaynakDosyalar) {
    # Dosyanın son değiştirilme zamanını al ve formatla (YYYYMMDD_HHMM)
    $zamanDamgasi = $dosya.LastWriteTime.ToString("yyyyMMdd_HHmm")
    # Hedef dosya adını zaman damgasıyla oluştur
    $hedefDosyaAdi = "$($dosya.BaseName)_$zamanDamgasi$($dosya.Extension)"
    $hedefDosyaYolu = Join-Path -Path $hedefKlasor -ChildPath $hedefDosyaAdi

    # Eğer aynı zaman damgalı dosya yoksa kopyala
    if (-not (Test-Path -Path $hedefDosyaYolu)) {
        Copy-Item -Path $dosya.FullName -Destination $hedefDosyaYolu -Force
        Write-Host "$($dosya.Name) -> $hedefDosyaAdi olarak yedeklendi."
    }
    else {
        # Eğer aynı zaman damgasıyla dosya varsa, kontrol et (ihtiyaten)
        $hedefDosya = Get-Item -Path $hedefDosyaYolu
        if ($dosya.LastWriteTime -gt $hedefDosya.LastWriteTime) {
            Copy-Item -Path $dosya.FullName -Destination $hedefDosyaYolu -Force
            Write-Host "$hedefDosyaAdi güncellendi."
        }
    }
}

Write-Host "Versiyonlu yedekleme tamamlandı!"

Bir yanıt yazın

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