( BaT | 2013. 08. 29., cs – 20:43 )

Végül nem futtattam le semmilyen hagyományos szinkronizáló programot, noha ennyi idő alatt már sokszor lefutott volna. Inkább elkezdtem lekódolni powershellben, mert elkezdett érdekelni a probléma. Az első verzió hamar elkészült, az alapelv az volt, hogy különböző metaadatok (fájlnév, utolsó módosítás dátuma) megkeresem az egyező fájlokat, ha jó helyen van semmit nem csinálok, ha rossz helyen van átmozgatom a helyére, és csak akkor másolom át ha nem létezik a távoli oldalon. Csakhogy nem gondoltam arra, mi a helyzet a duplikátumokkal, amik hatására természetesen a script mindenféle hülyeséget csinált az ilyen esetekben.

Ezután pihentettem pár napig a dolgot, végül kigondoltam mit kell tenni. Csoportosítani kell a fájlokat a fenti metaadatok szerint, ekkor az azonos fájlok egy csoportba kerülnek. Amikor egyezőséget keresünk, akkor a csoportok metaadatait kell összehasonlítani. Ezután ha nem találtunk a távoli oldalon csoportot, át kell másolni a fájlt a helyi oldalról. Ha találtunk, és a távoli csoportban van olyan fájl, ami jó helyen van, nem kell tenni semmit. Ha nincs, akkor a távoli csoportban kell keresni olyan fájlt, ami a helyi csoportban nincs az adott helyen, azt át lehet mozgatni. Ha ilyen sincs, a távoli csoport egyik fájlját kell másolni a megfelelő helyre. Megírtam a scriptet, de végül nem futtattam le. Ugyanis kiderült, hogy a módszer bár működik, de iszonyatosan lassú. Sokkal lassabb, mintha az egész könyvtárt másolnám át, úgy ahogy van. Gondolom a hatalmas fájllistában való keresés viszi el az idő nagy részét. Talán át lehetne írni úgy, hogy végül quick search-t használjon, vagy egy ciklussal egyszerre járnám be a két listát (lásd sort merge join), de más ötletem van.

Ugyanis idő közben ismertem meg a compare-object cmdlet-et, amit ha megfelelően fel tudnék paraméterezni, a munka nagy részét el is végezné, remélhetőleg sokkal hatékonyabban, mint amit én akármilyen trükközéssel össze tudok hozni. Úgyhogy a terv az, hogy a harmadik verzió compare-object-et fog használni.