Portál AbcLinuxu, 8. května 2025 23:34

Porovnání obsahu dvou adresářů

16.6.2005 11:47 | Přečteno: 3166×

Mám dva adresáře, které by měly obsahovat to samé, protože náhodou ten druhý vznikl různým složitým tar sem - tar tam z toho jednoho. Potřebuju si ověřit, že oba obsahy se skutečně shodují, nebo v čem se liší. diff a hotovo? Není to tak jednoduché.

diff skutečně dává možnost porovnat obsah dvou adresářů včetně podadresářů a rozumným způsobem nahlásí ty rozdíly. Jenže interpretuje symlinky a to se mu nedá rozmluvit. Symlink směřující do prázdna dokonce hlásí jako chybu. Takže pěkný, ale pro můj účel se diff nehodil.

Kdosi mi poradil ls -lR v každém z adresářů a diffem porovnat výstupy. Jenže to bych porovnal jenom módy souborů, velikost atd., ale ne skutečně obsah. Co když tar při obnově z archívu vytvořil soubor správné velikosti, ale vevnitřku samé nuly? Jednou jsem tento jev zažil, to vám byla psina. Od té doby jsem nedůvěřivej. Potom je taky ta věc, že symlinky vytvořené tarem myslím nemívají stejný čas vytvoření, takže by se mi ohlásily jako rozdílné. Totéž možná platí o device souborech (ale já jsem tam žádný neměl).

Obsah obyčejných souborů ve dvou adresářích se dá porovnat docela jednoduchým skriptem volaným z find. Stačí ověřit, že jednotlivý soubor existuje v obou adresářích a je to obyčejný soubor, a zavolat na něj cmp. To bylo pro mě částečné řešení, ale pořád jsem nevěděl, kterak porovnat symlinky.

Co třeba napsat si prográmek v Pythonu? (Nebo máte radši Perl?) No to by docela určitě šlo. Jenže to už je taková nouzovka, že jsem nad tím usnul.

Když jsem se probudil, napsal jsem

rdist -P /usr/bin/ssh -overify,compare,ignlnks,remove -c adresář_1 localhost:adresář_2

Zprávy pro puntičkáře: verify způsobí, že program nic neudělá, jenom řekne, co je potřeba. Pěkná vlastnost, že? compare se nespokojí s porovnáním velikosti a času a skutečně porovná obsah. ignlnks potlačí kontrolu cíle u symlinků. remove mi vypíše soubory, které jsou ve druhém adresáři navíc. Měl jsem běžícího ssh-agenta, takže ssh mi šlo bez hesla.

       

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

16.6.2005 12:25 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Diff
Odpovědět | Sbalit | Link | Blokovat | Admin
Co je špatného na

diff -qr adresář1 adresář2

?
17.6.2005 10:03 krnoha | skóre: 10 | blog: prizpevy
Rozbalit Rozbalit vše Re: Diff

Právě že to špatně zachází se symlinky. Obsah symlinku, který někam vede, to zpracuje, jako kdyby to byl rovnou ten cílový soubor. Symlink nikam nevedoucí ohlásí jako chybu. Potřeboval jsem, aby mi to porovnalo, kam symlinky ukazujou.

Josef Kufner avatar 16.6.2005 12:51 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše rsync?
Odpovědět | Sbalit | Link | Blokovat | Admin
co třeba rsync -n -v
Hello world ! Segmentation fault (core dumped)
17.6.2005 10:09 krnoha | skóre: 10 | blog: prizpevy
Rozbalit Rozbalit vše Re: rsync?

To jsem neznal. Vypadá to přímočařejší než rdist. Dík.

16.9.2006 13:03 Honza xxx
Rozbalit Rozbalit vše Re: Porovnání obsahu dvou adresářů
Odpovědět | Sbalit | Link | Blokovat | Admin
Pro Windows utilita pro porovnání obsahu dvou adresářů - 1/1 http://www.progr.cz/index.php?zobraz=clanek&id=15

Založit nové vláknoNahoru

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