Portál AbcLinuxu, 8. května 2025 23:34
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.
Tiskni
Sdílej:
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.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.