Jaké nástroje pro porovnávání adresářů mohu použít v OS X?
On 10 února, 2021 by adminHledám nástroj, který dokáže porovnávat adresáře, nejen soubory. Je také důležité mít možnost volat nástroj z příkazového řádku.
Bylo by skvělé mít bezplatný nástroj, pokud není zdarma, uveďte cenu.
Odpovědět
Pro všechny googlery … zkontrolujte pravidla Beyond Compare . Za verzi Pro stojí 30 $ nebo 50 $.
Komentáře
- Obvykle se snažím vyhýbat se doporučování komerčních řešení, když existují alternativy zdarma a open source, ale BeyondCompare je speciální případ, kdy stojí za každý cent … a je také multiplatformní. Používám ho více než 10 let a dlouho jsem čekal, až získá verzi pro MacOS.
- Je nyní duben 2020 a profesionální verze nyní stojí 60 $.
- I ‚ Vyzkoušeli jsme všechna řešení na této stránce a myslím, že Beyond Compare je 100% nejlepší a nejužitečnější doporučení.
Odpověď
FileMerge (zdarma) dodávaný s Xcode nabízí zobrazení adresáře.
Verze příkazového řádku je k dispozici prostřednictvím aplikace Terminal app opendiff.
Zde je uvedeno, jak můžete porovnat dva adresáře s FileMerge:
- ⌘ + mezerník, zadejte „FileMerge“ a otevřete jej.
- Klikněte na tlačítko „vlevo“ a vyberte složku, ze které chcete položky přesunout FROM. („Stará“ složka)
- Klikněte na tlačítko „vpravo“ a vyberte složku, kterou chcete chce přesunout položky do. („nová“ složka) a kliknout na tlačítko „Porovnat“
- Na pravém panelu zvolte vyloučení: „identické“ a „Změněné vpravo“. Tímto způsobem budete pouze Uvidíte soubory, které ve složce „new“ chybí, a ignorujte soubory, které jste mohli přidat do složky „new“.
- Přesuňte soubory ručně ve Finderu nebo to nechejte provést FileMerge výběrem možnosti v Rozbalovací nabídka „Sloučit“ na pravém panelu.
Komentáře
- Chci zvolit tuto odpověď, protože
opendiff
lze považovat za téměř “ dodávaný “ s OS X, ale při pokusu o rozdíl dvou složek se otevřel ošklivý pohled, který nebylo tak snadné pochopit, a také jsem nebyl schopen vidět, jak sloučím dva soubory v zobrazení souborů. Jsem si ‚ jistý, že je to možné, ale pokud tato základní vlastnost není zřejmá, raději budu hledat něco lepšího;) - FileMerge není tak dobrý jako BeyondCompare, dlouhým výstřelem. Ale je to zdarma a pro jednorázový požadavek, že ‚ je cena, kterou jsem hledal 🙂
Odpověď
Integrovaný nástroj pro MacOS a Linux
Pokud vám terminál nevadí, diff
může porovnávat adresáře.
Tento nástroj je k dispozici také ve většině distribucí systému Linux.
diff -rq directory1/ directory2/
-r
označuje opakování prostřednictvím podadresářů a -q
poskytuje krátký výstup (tj. nezobrazuje skutečné rozdíly, stačí si povšimnout, jaké soubory / adresáře se liší).
Další užitečné možnosti jsou:
-s
nahlásit stejné soubory,
-i
ignorovat velikost písmen v obsahu souboru,
--ignore-file-name-case
při porovnávání názvů souborů ignorovat velká a malá písmena.
Pokud se chcete vyhnout varování (většinou upozornění na užitečnost) ohledně rozdílů v .DS_Store
soubory, pak použijte:
diff -rq directory1/ directory2/ | grep -v .DS_Store
Komentáře
- Podsložky můžete vyloučit přímo pomocí
diff --exclude node_modules
- Ještě lépe, vy může použít
diff -x node_modules
odpověď
Diffmerge by měl splňovat všechny vaše požadavky.
Komentáře
- Jen doufám, že si vytvoří instalačního programu který bude schopen nainstalovat spouštěče příkazového řádku a vylepšit aktuální prostředí instalace.
- Toto je staré téma – ale nainstaloval jsem ho pomocí
brew cask install diffmerge
a nainstaloval bez problémů. - duben 2016: Je stále udržován a stále je jedním z mých vývojových nástrojů.
- FWIW jsem vyzkoušel
brew cask install diffmerge
dnes (červen 2020) a když jsem se pokusil spustit diffmerge, dostal jsem výstražné okno s oznámením, že MacOS ‚ program nespustí, protože ‚ t ověřit vývojáře. (diffmerge did not run) - @MikeTheTall Není to ‚ obvyklé pro aplikace, které nejsou z App Store? Zkusili jste přímo Ctrl, klikněte na ikonu aplikace a poté v místní nabídce vyberte
open
?
Odpovědět
Dalším elegantním nástrojem k dosažení tohoto cíle je rsync, jak je popsáno v Unixu & Linux StackExchange .Chcete-li porovnat dvě složky, můžete provést
rsync -avun $SOURCE $TARGET
A pokud vás skutečně zajímá konzistence souborů / bitová rotace, existuje také možnost c porovnat kontrolní součty souborů
rsync -avnc $SOURCE $TARGET
Komentáře
- Skvělá reference pro jeho užitečnost ve všech unixech 🙏🏻.
Odpověď
Nedávno jsem zakoupil kopii Kaleidoscope (přibližně 40 USD). Je to čistá aplikace.
vimdiff je také k dispozici prostřednictvím příkazového řádku a je přenosný přes většinu domén UNIXy.
Komentáře
- Už
používám Kaleidoscope již několik měsíců. Stojí za to. Cena se příležitostně prodává.
Odpověď
Měli byste vyzkoušet výkonný open-source software meld . Verze pro Mac lze najít na Meld pro OSX . Podporuje srovnání adresářů i souborů a funguje skvěle pod Macem.
Bylo mi řečeno, abych to vylepšil Odpovězte a vysvětlete, proč je splynutí dobré. Obecně řečeno, Meld je software pro srovnání všech funkcí, který se používá hlavně v GNOME. Je lepší než spousta zde uvedeného softwaru, protože
- je zdarma a otevřeně Takže nemusíte si dělat starosti s poplatkem nebo zabezpečením.
- pokud není výkonnější, je stejně sofistikovaný jako spousta softwaru, který od vás vyžaduje spoustu peněz,
- je to uživatel- přátelský a nezahrnuje složitou konfiguraci ani psaní příkazů v terminálu. Jakmile jej nainstalujete, měli byste být schopni jej okamžitě použít.
Část, která není tak dobrá, může být, že je vyvinuta pod GTK. Někdy se tedy necítí jako přírodní programy MAC. Kromě toho byly staré verze MAC trochu chybné. Ale nejnovější verze 3.19.2, kterou aktuálně používám, funguje skvěle a nikdy jsem se s žádným problémem nesetkal.
Komentáře
- Instalace je také snadná
brew cask install meld
Odpověď
Nástroj Diff, který je součástí Text Wrangler společnosti Bare Bones Software má srovnání adresářů, i když pouze ukazuje, které soubory jsou v obou adresářích a které jsou pouze v každém z adresářů. Když vyberete soubor, který je v obou, můžete upravit sloučením změn řádek po řádku kliknutím na tlačítko. Nedovolí vám však přesouvat soubory. Musíte to dělat externě (např. Přes Finder).
Považuji to za jednu z lepších bezplatných možností.
Odpovědět
Používám Synchronizace složek Na Mac App Store Funguje to opravdu dobře.
Odpovědět
Porovnávám velké struktury složek (DVD) v minulosti jsem k tomu vyvinul obslužný program příkazového řádku. Nedávno jsem tento nástroj (CrcCheckCopy) vytvořil zdarma a napříč platformami (MacOS a Windows).
CrcCheckCopy skenuje zdrojovou složku a vytváří soubor obsahující razítka CRC všech souborů. Poté se tento soubor použije k porovnání cílové složky.
Můžete jej získat zde: https://www.starmessagesoftware.com/crccheckcopy Vaše zpětná vazba, kterou si velmi ceníte.
Odpověď
Změna aplikace (37,19 $) bývala moje práce rkforce za to. Je to tak dobré jako za Beyond Compare.
Poznámka: Doufám, že tato kontrola kvality může existovat, i když je v rozporu s alespoň normami SO, které se hodí pro produkty. Potřeba použitelného, intuitivního a grafického nástroje pro porovnávání adresářů pro macOS je stále aktuální. Kandidáti na open source nedosáhli úrovně použitelnosti, kterou poskytují komerční nástroje.
Odpověď
Pokud víte, jak spustit Python , zde je skript, který jsem před časem napsal pro efektivní porovnání dvou adresářů.
Funkce:
- umí porovnávat stromové struktury a změny souborů (na základě velikosti souboru & hash MD5)
- může vypnout srovnání souborů, zobrazit pouze změny ve stromové struktuře (velmi rychle!)
- může vypnout srovnání obsahu souborů , spoléhat se pouze na změny velikosti souboru (opět velmi rychlé)
- může výstup zabarvit pro lepší čitelnost.
A samozřejmě se může upravit podle vašich potřeb, pokud víte, jak programovat.
#!/usr/bin/env python3 """ A script to recursively compare two directories (including file size and file hash changes) Usage: python3 compare_dirs.py DIR1 DIR2 """ import os, sys, hashlib COMPARE_FILES = True # should file sizes be compared if their names are the same? MD5 = True # should file hash sums be compared if their names and sizes are the same? COLORIZE = False # colorization for bash (only Linux & Unix) def md5sum(fn): hasher = hashlib.md5() with open(fn, "rb") as f: hasher.update(f.read()) return hasher.hexdigest() WHITE, RED, GREEN = 15, 196, 46 fg = lambda text, color: "\33[38;5;" + str(color) + "m" + text + "\33[0m" def compare_dirs(d1: "old directory name", d2: "new directory name"): def print_local(a, msg): text = "{} {} {}".format("DIR " if a[2] else "FILE", a[1], msg) if COLORIZE: color = {"added": GREEN, "removed": RED}.get(msg, WHITE) print(fg(text, color)) else: print(text) # Ensure validity for d in [d1,d2]: if not os.path.isdir(d): raise ValueError("not a directory: " + d) # Get relative path l1 = [(fn, os.path.join(d1, fn)) for fn in os.listdir(d1)] l2 = [(fn, os.path.join(d2, fn)) for fn in os.listdir(d2)] # Determine type: directory or file? l1 = sorted([(fn, pth, os.path.isdir(pth)) for fn, pth in l1]) l2 = sorted([(fn, pth, os.path.isdir(pth)) for fn, pth in l2]) i1 = i2 = 0 cnt = 0 common_dirs = [] while i1<len(l1) and i2<len(l2): if l1[i1][0] == l2[i2][0]: # same name if l1[i1][2] == l2[i2][2]: # same type if l1[i1][2]: # Pair of directories -> remember the name for recursion common_dirs.append((l1[i1][1], l2[i2][1])) elif COMPARE_FILES: # Pair of files -> compare their sizes size1 = os.stat(l1[i1][1]).st_size size2 = os.stat(l2[i2][1]).st_size if size1!=size2: print_local(l1[i1],"size changed: {:d} -> {:d}".format(size1, size2)) elif MD5: # Sizes are the same -> compare MD5 hashes if md5sum(l1[i1][1])!=md5sum(l2[i2][1]): print_local(l1[i1],"hash changed") else: print_local(l1[i1],"type changed") i1 += 1 i2 += 1 elif l1[i1][0]<l2[i2][0]: print_local(l1[i1],"removed") i1 += 1 elif l1[i1][0]>l2[i2][0]: print_local(l2[i2],"added") i2 += 1 cnt += 1 while i1<len(l1): print_local(l1[i1],"removed") i1 += 1 cnt += 1 while i2<len(l2): print_local(l2[i2],"added") i2 += 1 cnt += 1 # Compare subfolders recursively for sdir1,sdir2 in common_dirs: cnt += compare_dirs(sdir1, sdir2) return cnt if __name__=="__main__": print ("Comparing files {}abled".format("en" if COMPARE_FILES else "dis")) print ("MD5 checking {}abled".format("en" if MD5 else "dis")) print ("Colorization {}abled".format("en" if COLORIZE else "dis")) print (compare_dirs(sys.argv[1], sys.argv[2]), "items compared")
Odkaz na GitHub Gist.
POZNÁMKA: nebude to fungovat u souborů nebo podadresářů, které byly přesunuty na iCloud.
Odpovědět
Nejjednodušší řešení: Synchronizujte soubory pomocí Dropboxu nebo podobného, pak stačí použít WinMerge ve Windows.
Nástroj FileMerge dodávaný s Xcode neporovnává složky a nespojuje / neupravuje.
Napsat komentář