Porównanie plików tekstowych, usuwanie takich samych ciągów (ścieżek)

Szukam programu albo jakiegoś prostego skryptu do porównania dwóch plików tekstowych, które zawierają listę plików z danego katalogu.
Czyli np. skanuję katalog “Zdjęcia” na dysku X programem Everything i eksportuję listę na której jest 120 plików. Teraz skanuję katalog “Zdjęcia” na dysku Y i eksportuję listę na której jest 240 pozycji.
Program miałby porównać te dwa pliki tekstowe ze sobą i usunąć pozycje wspólne, po czym zwrócić nowy plik z pozostałymi ścieżkami, które są tylko na jednym z dysków.
Wiem że dałoby się to ogarnąć TotalCommanderem żywcem na samych katalogach, ale robię to na dwóch różnych komputerach.

Notepad++ i do tego plugin do porównywania zawartości

3 polubienia

Ehh, plugin niby ok, ale przy takiej dużej ilości wierszy jest niezły bałagan przez co jest to nieczytelne. W dodatku na dysku który pracował w komputerze niektóre foldery mają we właściwościach lokalizację
C:\Users\Krzysztof Ibisz\ Desktop\kamera
a te skopiowane
G:\Users\Krzysztof Ibisz\ Pulpit\kamera
co też komplikuje sprawę…

WinMerge?..Text Compare?

1 polubienie

Uzyj funkcji wyszukaj w notepad++ i w zakładce zastąp podmień lub skasuj adress naczelny i sprowadź wszystko do wspólnego mianownika że tak to powiem :smiley:

1 polubienie

Jakby ktoś kiedyś szukał czegoś podobnego i podobnie jak ja nie umiał znaleźć pasującego programu to napisałem finalnie sobie skrypt w języku PHP, który porównuje dwa pliki tekstowe ze sobą, ucinając początek każdego wiersza, aby wykluczyć inne litery dysku oraz folder, a porównać nazwy samych plików + kawałek katalogu w którym ten plik się znajduje. Lepiej wyjaśnione jest to w komentarzach w kodzie.
Aby to odpalić można skorzystać z hostingu CBA i tam stworzyć plik.php, wkleić do środka ten kod oraz umiejscowić obok tego pliku dwa pliki tekstowe do porównania lub odpalić na swoim PC serwer Apache za pomocą XAMPP.

<?php
$kopia = file_get_contents("kopia.txt");
$oryginal = file_get_contents("oryginal.txt");

//Wpisywanie każdego wiersza do tablicy

$kopia = explode("\n", $kopia);
$oryginal = explode("\n", $oryginal);

//Obcinanie ścieżek i wpisywanie końcówek do tablicy

for($i=0; $i<count($kopia); ++$i) {
 $dlugosc = strlen($kopia[$i]);
 $kop_tab[$i] = substr($kopia[$i], $dlugosc-20, $dlugosc-1); // w tym przypadku obcinam 19 znaków od końca ścieżki, można pokombinować i obciąć do przedostatniego ukośnika itp, ale jeśli wystarczy jakaś stała ilość to zamiast -20 wpisz więcej albo mniej, -20 oznacza że zostanie 19 znaków od końca
}

for($i=0; $i<count($oryginal); ++$i) {
 $dlugosc = strlen($oryginal[$i]);
 $org_tab[$i] = substr($oryginal[$i], $dlugosc-20, $dlugosc-1);
}

//Rozmiar tablic

$org_tab_size = count($org_tab);
$kop_tab_size = count($kop_tab);

//Szukanie takich samych ciągów

for($i=0;$i<=$org_tab_size;$i++) {

$match = 0; //zmienna która kontroluje czy znaleziono taki sam ciąg czy nie

for($x=0;$x<=$kop_tab_size;$x++) {  //pętla szuka elementu "i" z tablicy org_tab  w całej tablicy kop_tab, jak znajdzie to pętla się przerywa, jak nie znajdzie, wypisuje nazwę pliku na ekranie, wtedy będę widział że plik był na dysku komputera a nie mam go w swojej kopii

    if($org_tab[$i]==$kop_tab[$x]) {

        $match = 1;
        $x = $kop_tab_size; //to zakończy pętlę, bo skoro znalazło taki sam ciąg to już szukać nie musi

    }

}

    if($match==0) echo $org_tab[$i]."<br>"; //jeśli nie znaleziono takiego pliku to go wypisz na ekranie

}

?>

No to mogłoby zdać egzamin jakby jedyną różnicą w ścieżkach byłaby litera dysku, albo jakby wszystkie inne katalogi znajdowałyby się w jednym konkretnym katalogu i miałbym je skopiowane też do jednego folderu, aby późniejsze ścieżki były takie same.
W jednym pliku który miał w sobie ścieżki samych obrazów znalezionych na dysku miałem 35 000 wierszy, wiadomo, były tam także jakieś ikonki, obrazki do gier itp. i jakbym miał je potem skopiowane wybiórczo do innych folderów to już by nie zadziałało.
Najlepiej jakby dało się przyciąć ścieżkę z postaci C:\Users\Tytus\Desktop\Fotki\Bałtyk do \Fotki\Bałtyk albo samo Bałtyk to byłoby idealnie. Ew. jakby program porównał same nazwy plików to też by zadziałało.

Dzięki za pomoc!