Portál AbcLinuxu, 19. dubna 2024 22:20

Porovnávání obsahu adresářů v GUI

19. 6. 2014 | David Kolibáč
Články - Porovnávání obsahu adresářů v GUI  

V dnešní době je vcelku běžné synchronizovat svá data s nějakým centrálním úložištěm, typicky poskytovaným třetí stranou jako DropBox nebo Google. Ani automatizované zálohování není nic neobvyklého. Stále je tu však skupina staromódních uživatelů, kteří data zálohují ručně na externí disk a aktuálně používaná data mají na flešce. Pokud mezi ně patříte a neholdujete příkazovému řádku, mohly by se vám hodit nástroje, jež porovnají obsah dvou adresářů a změny přehledně zobrazí v grafickém uživatelské rozhraní.

Tuto funkcionalitu poskytuje v prvé řadě multiplatformní FreeFileSync, který také umí obsah adresářů sloučit, jak název naznačuje. Dále jsou to některé aplikace určené primárně pro srovnávání obsahu (textových) souborů, totiž Meld nebo KDiff3.

Obsah

Meld

link

Nejsnáze použitelná aplikace, na kterou se podíváme, je Meld. Díky tomu, že běží v Pythonu a používá PyGTK, je potenciálně multiplatformní a ani nevyžaduje instalaci, pokud máte v systému nezbytné knihovny. V únoru vydaná verze 3.11 už používá GTK+ 3 a úžeji se integruje s GNOME 3, ale v repozitářích většiny distribucí stále obvykle najdeme starší Meld 1.8.x, který závisí na GTK+ 2.

Meld

Jestliže používáte aktuální prostředí KDE Plasma Workspace s integrací GTK+ aplikací, resp. motivem vzhledu oxygen-gtk nebo QtCurve, je pravděpodobné, že Meld z řady 1.8 bude padat při pokusu o výběr adresáře k porovnání. V současné době to jde jen obejít tak, že změníte motiv vzhledu GTK2 aplikací. V KDE tak můžete učinit v Nastavení systému, Vzhled aplikací na kartě GTK.

Použití je prosté, stačí otevřít novou kartu, v ní vybrat Porovnávání složek a dva (příp. tři) adresáře ke srovnání a potvrdit výběr tlačítkem Porovnat. Adresářové stromy se pak zobrazí vedle sebe se zvýrazněnými rozdíly. Pomocí tlačítek Kopírovat nalevo/Kopírovat napravo/Smazat (klávesové zkratky Alt+šipka vlevo/vpravo, Delete) můžeme obsah vlastně synchronizovat. Ale nedoporučuji takto kopírovat větší objemy dat, protože uživatelské rozhraní během provádění příslušných operací zamrzne a ani se nikde nezobrazují informace o průběhu. Můžeme také porovnávat nebo slučovat textové soubory (binární nikoliv – oproti KDiff3, který bude následovat).

Meld: srovnání adresářů

Pokud manipulujete s objemnými daty (v řádu gigabajtů), ve kterých dochází jen ke změnám typu přidání/odebrání souboru, můžete porovnávání urychlit tím, že v konfiguračním dialogu povolíte, aby se srovnávala pouze velikost a čas změny souborů, ne celý obsah.

Konfigurace Meld

KDiff3

link

KDiff3 zmiňuji spíš jen pro úplnost, je totiž sice nabitý funkcemi, nicméně ovládání rozhodně není intuitivní – vývoj navíc stagnuje. Z názvu by se mohlo zdát, že aplikace má nějakou souvislost s projektem KDE a skutečně tomu tak je. KDiff3 se tak umí integrovat se zbytkem prostředí, ať už jde o prostou položku ve kontextové nabídce ve správci souborů nebo rovnou KIO slaves. Na druhou stranu, pokud závislosti na knihovnách KDE zrovna neholdujete, existuje také sestavení, které používá pouze čisté Qt4; v Ubuntu se odpovídající balíček jmenuje kdiff3-qt.

KDiff3

Jak tedy vlastně porovnat více adresářů v KDiff3? V dialogu po spuštění si vyberete dva nebo tři adresáře a příp. operaci, která se s nimi má provést, a nový adresář, do kterého se má uložit výsledek. To je ta jednodušší část.

KDiff3: nové porovnání

Pak se zobrazí vizualizace porovnání: seznam souborů/adresářů a ve sloupcích A a B (a příp. C) barevně zvýrazněno, zda se v příslušném zdroji daný soubor/adresář vyskytuje. V pravé části okna je pak srovnání atributů vybrané položky mezi zdroji. Jenže co dál? Klíčový je sloupec Operace. Po klepnutí na položku v tomto sloupci se ne právě intuitivně zobrazí kontextová nabídka, ve které si můžeme vybrat, která verze se použije, zda se má položka prostě smazat, nebo zda chceme provést ruční sloučení. Změny pak provedeme pomocí klávesové zkratky F6 či F7, resp. odpovídajících položek v nabídce Adresář.

KDiff3: srovnání adresářů

Jednou z výrazných výhod KDiff3 jsou možnosti nastavení, co a jak se má vlastně porovnávat. Tzn. maska srovnávaných souborů, nebo naopak maska názvů souborů, které se mají přeskočit; zda se mají následovat odkazy; zda se porovnává obsah, nebo jen metadata atp.

Konfigurace KDiff3

FreeFileSync

link

Nakonec FreeFileSync, tedy program skutečně určený k synchronizaci adresářů, nikoliv primárně porovnávání a slučování souborů. Je multiplatformní a používá knihovnu wxWidgets – jedním z důsledků je uživatelské rozhraní poněkud nezapadající na linuxový desktop; na druhou stranu je ovšem docela polopatické. Pro Ubuntu existuje PPA, u ostatních distribucí je to s instalací složitější. Název programu je pak také mírně nezvyklý – kdo by čekal velká písmena?

FreeFileSync

V každém ze dvou panelů si prostě vybereme adresář (nebo více adresářů) ke srovnání, příp. ho přetáhneme ze správce souborů (ano, táhni a pusť funguje). Tlačítkem Porovnat spustíme porovnávání a tlačítkem Synchronizovat pak přesun nebo kopírování dat. Konkrétní operace si nastavíme v dialogu vyvolaném přes zelené ozubené kolečko vpravo: situace, které mohou nastat (soubor jen na jedné straně, různé verze souboru), a příslušné akce (kopírování doleva/doprava, smazání atd.) jsou řádně blbuvzdorně reprezentovány piktogramy – naštěstí s nápovědou při přejetí kurzorem. Několik vcelku smysluplných nastavení je FFS v případě konfliktu soubory slučovat neumí, ani se neintegruje s žádnou aplikací, která by to uměla. Holt asi cena za přítulnost vůči běžnému uživateli.

FreeFileSync: probíhající porovnávání adresářů FreeFileSync: srovnání adresářů FreeFileSync: nastavení synchronizace FreeFileSync: informace o synchronizaci před schválením FreeFileSync: informace o proběhlé synchronizaci

Možností nastavení není mnoho, leč v principu jsou postačující. Ikonka trychtýře otevře dialog, ve kterém si můžeme nastavit soubory, jež se (ne)mají ve srovnání objevit. Modré ozubené kolečko mění parametry porovnávání, tj. jak se má FFS zařídit v případě výskytu odkazů a zda se mají soubory porovnávat byt po bytu, nebo jen podle atributů jako velikost a čas změny.

FreeFileSync: filtry FreeFileSync: nastavení porovnávání

Závěr

link

Několika běžným uživatelům jsem s úspěchem doporučil FreeFileSync jako nástroj pro usnadnění ručního “zálohování” (přesouvání adresářů mezi externími disky tak nějak od oka). Já příležitostně používám hlavně Meld, nikoliv však pro kopírování velkých objemů dat, např. při kopírování hudby do kapesního přehrávače – v tom případě raději sáhnu po rsync, jemuž bylo věnováno nemálo slov v jiných článcích.

Další články z této rubriky

Týden na ITBiz: Svět IT a burzy, umělá inteligence, Nvidia a outsourcing
Linuxové foto novinky: pozvolná evoluce
PCLinuxOS 2017.2 MATE - tak trochu zvláštní linuxová distribuce
Krátký pohled na Fedoru 25, Wayland a GNOME 3.22
Naprosto ničím nezajímavé Lubuntu 16.10

Diskuse k tomuto článku

Juraj Remenec avatar 19.6.2014 11:30 Juraj Remenec | skóre: 30
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Odpovědět | Sbalit | Link | Blokovat | Admin
To mi pripomenulo, že hľadám program, ktorý dokáže synchronizovať súbory na lokálnom stroji so strojom vzdialeným (možnosť vybrať viaccero metód prenosu - FTP, SCP, SFTP, CIFS, NFS a pod.) a zároveň ich ale pred uložením na vzdialený stroj dokáže zašifrovať a skomprimovať (napríklad AES so zipom...). Existuje http://allwaysync.com/ lenže je len na Windows a nie je tak celkom zadarmo. Neviete o niečom takomto na Linuxe (najlepšie gui friendly...)??
19.6.2014 11:47 pavele
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
duplicity
19.6.2014 18:29 míša
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Dovolím si seznam těch nejzákladnějších:

Meld

Beyond Compare

kdiff3

DiffMerge

Diffuse

SmartSynchronize

Kompare

DeltaWalker

GNU Diffutils

Tkdiff

xxdiff

ECMerge

SemanticMerge

Hlavně, že autor pro úplnost uvedl v článku pouze tři ...

Fluttershy, yay! avatar 20.2.2015 18:49 Fluttershy, yay! | skóre: 92 | blog:
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Meld

V článku.

Beyond Compare

Proprietární software.

kdiff3

V článku.

DiffMerge

Proprietární software.

Diffuse

Nevšiml jsem si, že by umělo porovnávat adresáře.

SmartSynchronize

Proprietární software.

Kompare

Nevšiml jsem si, že by umělo porovnávat adresáře.

DeltaWalker

Proprietární software.

GNU Diffutils

AFAIK nemá GUI, resp. má...

Tkdiff

...GUI pro diff, jenže AFAIK (zatím) neumí porovnávat adresáře. Jde použít dirdiff nebo neudržovaný fork tkdiff+, ale přijde mi to dokonce víc přes ruku než KDiff3.

xxdiff

Díky, neznal jsem.

ECMerge

Proprietární software.

SemanticMerge

Proprietární software.

🇵🇸Touch grass🇺🇦 ✊ no gods, no masters
Jendа avatar 20.6.2014 00:22 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Ne. Duplicity toto nedokáže. Duplicity pouze donekonečna generuje inkrementy.
19.6.2014 12:32 Ondra
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
ja hledam program, ktery porovna obsahy 2 adresaru, ktere se nachazeji na ruznych vzdalenych servrech. Tedy konkretne, na windows se mohu propojit pres ssh na oba vzdalene linuxove stroje (nic jineho napr. ftp...) neni k dispozici.

Umi ta duplicity neco takoveho?

Vim ze to jde pres rsync (tak to take v prikazove radce delam, ze se presunu pres ssh na jeden z tech servru a kontroluji obsah vuci tomu druhemu servru), ale nejake takove graficke udelatko by bylo velmi vhodne.
Ruža Becelin avatar 19.6.2014 17:45 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Unison by to mel umet
Jendа avatar 20.6.2014 00:25 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
ls -lR > 1; ls -lR > 2; diff 1 2 :-) Případně sha1sum, pokud chceš i obsah.
20.6.2014 10:10 ikar
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
+1
21.6.2014 02:52 Kvakor
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Pokud tam běží SSH, tak bych připojil na jednom stroji adresář z druhého stoje přes sshfs a použil porovnávací utilitu dle libosti. Dokonce existuje něco-jako-sshfs pro Windows, ale když jsem to kdysi testoval, tak funkčnost nebyla nic moc.
Jendа avatar 20.6.2014 00:24 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
encfs reverse mode + rsync. Nevýhodou samozřejmě je, že útočník vidí metadata. Pak je ještě možnost vytvořit si tam velký kontejner a ten zašifrovat dm-cryptem, vytvořit v něm FS a připojit přes loopback.
19.6.2014 13:24 pepa
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Odpovědět | Sbalit | Link | Blokovat | Admin
Co p4merge?
19.6.2014 14:44 PSIkappa
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Odpovědět | Sbalit | Link | Blokovat | Admin
Existuje nejaky tool na porovnavanie adresarov, ktory by nepotreboval pristup k obidvom adresarom naraz?

Predstavujem si to tak, ze na stroji A spustim program, ktory mi vytvori nejaky vystup, volajme ho katalog a tento katalog prekopirujem na stroj B, kde porovnam adresar voci katalogu. Este v mojej idealnej predstave je, ze katalog obsahuje rolling hash suboru, takze bude vediet zistit, presne cast zmeneneho suboru, ktoru treba zosynchronizovat a nebude treba kopirovat cely subor.

Existuje nieco take alebo si to musim napisat sam?
Fluttershy, yay! avatar 19.6.2014 15:18 Fluttershy, yay! | skóre: 92 | blog:
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
rsync?
🇵🇸Touch grass🇺🇦 ✊ no gods, no masters
Jendа avatar 20.6.2014 00:26 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
19.6.2014 15:46 User682 | skóre: 38 | blog: aqarium | Praha
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Odpovědět | Sbalit | Link | Blokovat | Admin
zdravim,

zde by asi stalo za to pripomenout, ze clovek nemusi jen data synchronizovat, ale muze jen sledovat zmeny. Napriklad pri vyvoji nejakeho SW.

Uvedu 2 prakticke priklady:

0) ladite nejake buildovaci skripty ci nejake prace okolo releasovani. Workspace pres 1.5GB. Neco to zapise do ruznych souboru v radu treba desitek souboru a potrebujete videt presne co. Pak nastupuje ramdisk (prace pres filesystem zdrzuje) a pres meld porovnavate, co se kde zmenilo.... Neni to uplne idealni, nebot ne vzdy porovnavace podporuji zakazani zobrazeni vybranych souboru, i v pripade zmeny.

1) nejake cteni a zapis nejakeho formatu do souboru a propojeni s testy. Nacist vzor, zapsat vysledek (oboji naformatovat) a melo by to byt stejne. Pokud to pres nejake xmlunit spadne, tak si clovek porovna v tmp adresari vzor a vysledek zapisu v pripade chyby.

gf
Fluttershy, yay! avatar 19.6.2014 16:24 Fluttershy, yay! | skóre: 92 | blog:
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
zdravim,

zamyslena cilova skupina ctenarstva clanku byla jina.

dk
🇵🇸Touch grass🇺🇦 ✊ no gods, no masters
20.6.2014 19:40 Petr Ježek | skóre: 10
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Což znamená, že by se mělo uvést více aplikací a pro ty, co nejsou cílovou skupinou dle autora, leč jejich zájmy přirozeně s tématem souvisejí, uvést i něco k sledování změn. Cílové skupiny se zamýšlejí nikoli podle toho, co umím, ale podle toho, co je zajímá a zajímat může. pj
Archlinux for your comps, faster running guaranted!
Fluttershy, yay! avatar 20.6.2014 20:03 Fluttershy, yay! | skóre: 92 | blog:
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Ne, neznamená. Paradox volby.
🇵🇸Touch grass🇺🇦 ✊ no gods, no masters
19.6.2014 20:13 ebik | skóre: 2
Rozbalit Rozbalit vše Re: Porovnávání obsahu adresářů v GUI
Při worksetu 1.5GB (v nepříliš velkých souborech) se na "testování" hodí unionfs, nebo něco podobného: člověk ty změny vrátí jedoduchým rm -rf (a když je ten layer, do kterého se ukládají změny, ramdisk, tak je to i příjemně rychlé). Já to používám na sestavování balíčku v "čistém" chrootu. Namountuju přes unionfs ten "čistý chroot" s prázdným adresářem v tmps, pak tam doinstaluju build depenencies a spustim sestavení balíku. Po úspěšném sestavení stahnu balík, odmountuju unionfs a smažu ramdisk a můžu si hrát s jiným balíkem.
regine avatar 19.6.2014 18:29 regine | skóre: 22 | blog: regine
Rozbalit Rozbalit vše Krusader - OK
Odpovědět | Sbalit | Link | Blokovat | Admin

Staromódně dlouhodobě k plné spokojenosti užívám Krusader -> Nástroje -> Synchronizovat adresáře ...

Cigareta krátí život o 1 minutu, láhev koňaku o 5 minut a pracovní den krátí život o 8 hodin.
20.6.2014 14:58 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Krusader - OK
+1 také tak.
21.6.2014 14:04 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: Krusader - OK

Taky tak. Jen se obávám, abychom o tuhle možnost brzo nepřišli, protože v současnosti kód není udržovaný.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.