Skript na porovnání dvou souborů v bashi

Skript na porovnání dvou souborů v bashi
« kdy: 06. 05. 2023, 00:34:13 »
Chtěl jsem od chatGPT skript na porovnání souborů v adresářích, ale nejde to, ten robot je totálně tupý. Nezvládá elementární logické postupy. Zkoušel jsem to několikrát a pak vzdal. Takže snad mi tu může někdo poradit. Jde o to, že z těch dvou souborů file1 a file2 by se měly vodstranit ty přebývající soubory. Výsledný počet souborů má být stejný a stejné jména. Zajímá mě kolik těch redundantních souborů se odstranilo a pak mě zajímá porovnání data mezi soubory. A ještě je tam problém, že s tou relativní cestou se vypsala i ta část co tam nemá být. Protože každý adresář je někde jinde. A v těch file1 a file2
nemůže být tacesta k /usr/local/share/perl/5.30.0/OpenAI/API/lib/OpenAI/API ani "lib/OpenAI/API". V podstatě jsem chtěl jen porovnat duplicitní soubory a data těch souborů... A GPT je zkrátka tupý na takový věci. Nedokáže pochopit co chci. Kod převést do jiného jazyka by jakž takž zvládl. Zdá se mi tedy, že tam jsou dva problémy, cesta ve výstupu a že file1 a file2 nejsou odfiltrovaný aby byli kompatilibilní nebo konzistentní k porovnání.

Kód: [Vybrat]
#!/bin/bash

# Directory paths
path1="/usr/local/share/perl/5.30.0/OpenAI/API"
path2="/usr/local/share/perl/5.30.0/OpenAI/API/lib/OpenAI/API"

# Find files with identical names and sizes but different dates
# find "$path1" -type f -not -name "*.txt" -printf "%f %s %TY-%Tm-%Td %TH:%TM:%TS\n" | sort > file1
# find "$path2" -type f -not -name "*.txt" -printf "%f %s %TY-%Tm-%Td %TH:%TM:%TS\n" | sort > file2

find "$path1" -type f -printf "%P %s %TY-%Tm-%Td %TH:%TM:%.2TS\n" | sort > file1
find "$path2" -type f -printf "%P %s %TY-%Tm-%Td %TH:%TM:%.2TS\n" | sort > file2


# Compare files
comm -12 file1 file2 | while read line
do
    name=$(echo "$line" | cut -d ' ' -f 1)
    size=$(echo "$line" | cut -d ' ' -f 2)
    date1=$(echo "$line" | cut -d ' ' -f 3-)
    date2=$(grep "^$name $size " file2 | cut -d ' ' -f 3-)
   
    if [ "$date1" \< "$date2" ]
    then
        echo "$path1/$name is older than $path2/$name ($date1 < $date2)"
        # rm "$path1/$name"
    elif [ "$date2" \< "$date1" ]
    then
        echo "$path2/$name is older than $path1/$name ($date2 < $date1)"
        # rm "$path2/$name"
    fi
done

# Clean up temporary files
# rm file1 file2


Re:Skript na porovnání dvou souborů v bashi
« Odpověď #1 kdy: 06. 05. 2023, 07:45:26 »
Možná jste se ptal blbě nebo příliš komplexně.
Je dobré to rozdělit na dílčí problémy a ty s GPT řešit. Většinou i kostru hlavního programu trefí
Já v bashi v životě nic nenapsal a s pomocí chatGPT jsem za večer napsal scripty na stahování seriálů a sólo pořadů z nové verze archivu českého rozhlasu.
Ale "cestou" mne donutil ty použité příkazy trochu nastudovat a pochopit.
Což není myslím na škodu.

Re:Skript na porovnání dvou souborů v bashi
« Odpověď #2 kdy: 06. 05. 2023, 11:45:22 »
Vím, že požadavek je třeba dostatečně elaborovat a specifikovat, ale nemám tyto znalosti, můžete mi pomoci zformulovat ten dotaz pro chatGPT?

Re:Skript na porovnání dvou souborů v bashi
« Odpověď #3 kdy: 06. 05. 2023, 12:43:18 »
Jestli jsi to tomu stroji vysvětloval stejně jako tady do fóra, tak by mě hodně překvapilo, kdyby to pochopil :)
Celkem na začátku: "...z těch dvou souborů file1 a file2 by se měly vodstranit ty přebývající soubory"?! Jaké přebývající soubory?
Navíc - ty tmp soubory jsou nutné nebo je to tvoje představa, že to bez nich řešit nejde a proto je vytváříš? Zkus srozumitelně popsat co vlastně potřebuješ a pak bude možné vymyslet jak to podat ChatGPT.

vcunat

  • ***
  • 131
    • Zobrazit profil
    • E-mail
Re:Skript na porovnání dvou souborů v bashi
« Odpověď #4 kdy: 06. 05. 2023, 12:55:35 »
No, když já taková porovnání řeším, většinou to potřebuji spíš interaktivně a na tu dvojici adresářů pouštím meld nebo kdiff3 (někdy nepřímo, třeba skrze git difftool).  Ale taky mi z dotazu není úplně jasné o co jde.


tecka

  • ***
  • 151
    • Zobrazit profil
    • E-mail
Re:Skript na porovnání dvou souborů v bashi
« Odpověď #5 kdy: 06. 05. 2023, 13:15:21 »
Ten popis je k nepochopení i pro člověka. Natož pak pro GPT, které jen generuje slova, která se mu zdají jako možné pokračování tvých slov.

Vyhoď z hoho seznamu to datum, jen vem seznam souborů a ten projdi. Zkus jestli je soubor jen v A nebo jen v B a když je v obou tak porovnej datumy. Ne tom není nic k vymýšlení.

Re:Skript na porovnání dvou souborů v bashi
« Odpověď #6 kdy: 06. 05. 2023, 14:11:56 »
Nakonec jsem se na to vykašlal a ty starší složky prostě smazal. Zdá se prostě že v adresáři OpenAI/API byla navíc složka lib, která se tam dostala podle instrukcí co mi radil chatGPT jak nainstalovat OpenAI z githubu. A jelikož jsem pak našel způsob jak to správně nainstalovat tak tam OpenAI bylo dvakrát. Takže starou složku jsem smazal. Chtěl jsem zjistit, které soubory byly duplicitní (název souboru a velikost je stejná) a zároveň si prohlédnout to datum souboru. Na to by bylo dobré mít ty dva soubory vedle sebe a vidět jejich rozdílné datum. To nedokázal pochopit. Porovnával mezi sebou dvě cesty k téže instalaci (jeden adresář je request a druhý je response), místo soubory z cest mezi dvěma instalacema (1. request, response proti 2. lib/OpenAI/API ) .