3.02.2026

İki klasörün içindeki tekrarlayan dosyaları bulmak

D:\dizin1 ve D:\dizin2 gibi iki klasörüm ve içinde bazı dosyalarım var. Acaba Dizin1'de olan dosyaların herhangi biri Dizin2'de de olabilir mi? Görmek için önce iki dizinin de dosyalarını birer array değişkene aktardım.

$ar1 = dir -path D:\dizin1 -File
$ar2 = dir -path D:\dizin2 -File

Sonra da dizin1'deki her dosyanın dizin2'de olup olmadığını görmek için bir döngü oluşturdum. 

$ar1 | % {if ($_ -in $ar2) {$_}}

Bu şekilde olmadı. Neden? Çünkü $ar1'in elemanlarından her birini temsil eden $_ nesnesi tam olarak $ar2'nin  elemanlarından biri ile tamamen aynı değildir. Çünkü içinde FullName gibi sadece dizin2'ye ait bazı alanlar da vardır ve tamamen aynı olamaz. Karşılaştırmayı nesnenin bütün özellikleri ile değil de sadece dosya adları (.Name) ile kısıtlayarak aşabilirim.

$ar1.Name | % {if ($_ -in $ar2.Name) { $_ }}

Elbette bu şekilde sadece D:\dizin1 ve D:\dizin2'nin doğrudan içindeki dosyaları karşılaştırabilirim. Eğer alt klasörlerini de dahil etmek istersem biraz daha işleme ihtiyacım var. Şimdilik fikir olarak bununla kalayım.

Bu yöntem D:\dizin1\resim1.jpg ile D:\dizin2\resim1.jpg dosyalarının aynı olduğunu, sadece dosya ismine bakarak teşhis eder. Dosyanın oluşturma tarihi, değiştirme tarihi, boyutu ve içeriğini kontrol etmez. Basit bir karşılaştırma.

Tüm içeriğe girmeden sadece dosya adı ve boyutu da hesaba katarak bir karşılaştırma yapmak da mümkün. Bunun için karşılaştırmayı Compare-Object ile yapmak gerekecek.

compare $ar1 $ar2 -Property Name, Length -IncludeEqual -ExcludeDifferent

Eğer son değiştirilme tarihleri birebir aynıysa -Property'den sonra LastWriteTime da eklenebilir.

Hiç yorum yok: