Následující (pokud nahradíte první adresář za adresář1 a druhý za adresář2) by mělo udělat to, co hledáte, a to rychle:
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
Základním principem je, že vytiskne všechny adresáře včetně cest podadresářů vzhledem k základním adresářům adresářeN.
To by mohlo spadnout (produkovat divný výstup), pokud máte návrat vozíku v některých názvech adresářů, ale ne v jiných.
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
vám poskytne pěkné zobrazení dvou hierarchií adresářů vedle sebe se složenými běžnými sekcemi.
Obvykle používám rsync
pro tento úkol:
rsync -nav --delete DIR1/ DIR2
BUĎTE VELMI OPATRNÍ vždy použít -n
, neboli --dry-run
, nebo synchronizuje (změní obsah) adresářů.
To porovná soubory na základě časů a velikostí úprav souborů... myslím to je to, co opravdu chceš, nebo ti to alespoň nevadí? Mám pocit, že jen chcete, aby to proběhlo rychleji , ne že jej potřebujete k ignorování rozdílu mezi obsahem souboru. Pokud chcete, aby nevypisoval různé soubory se stejnými názvy, myslím, že přidání --ignore-existing
možnost to udělá.
Také si uvědomte, že nevkládání /
na konci DIR1
způsobí, že porovná adresář DIR1
s obsahem z DIR2
.
Výstup je nakonec trochu podrobný, ale ukáže vám, které soubory/adresáře se liší. Soubory/adresáře přítomné v DIR2
a ne v DIR1
bude uvozeno slovo deleting
.
V některých situacích může být vhodnější odpověď @slartibartfast, i když budete muset odstranit -type d
možnost povolit výpis souborů, které nejsou v adresáři. rsync
bude rychlejší, pokud máte k porovnání značné množství souborů/adresářů.