Vilka verktyg för katalogjämförelse kan jag använda på OS X?
On februari 10, 2021 by adminJag letar efter ett verktyg som kan jämföra kataloger, inte bara filer. Det är också viktigt att kunna ringa verktyget från kommandoraden.
Det skulle vara fantastiskt att ha ett gratis verktyg, om inte gratis, ange priset.
Svar
För alla googlare … kolla in Beyond Compare reglerar det. Kostar 30 $ eller 50 $ för Pro-versionen.
Kommentarer
- Jag försöker vanligtvis undvika att rekommendera kommersiell lösning när det finns gratis och öppen källkod alternativ men BeyondCompare är ett speciellt fall där det är värt vartenda öre … och är också flera plattformar. Jag har använt den i mer än 10 år och väntat länge på att få MacOS-versionen.
- Det är nu april 2020 och pro-versionen kostar nu $ 60.
- I ’ har provat alla lösningar på den här sidan och jag tycker att Beyond Compare är 100% den bästa och mest värda rekommendationen.
Svar
FileMerge (gratis), levereras med Xcode, erbjuder en katalogvy.
En kommandoradsversion är tillgänglig via Terminal-applikationen.
Så här kan du jämföra två kataloger med FileMerge:
- ⌘ + mellanslag, skriv in ”FileMerge” och öppna det.
- Klicka på ”vänster” -knappen och välj den mapp du vill flytta objekt FRÅN. (Den ”gamla” mappen)
- Klicka på knappen ”höger” och välj mappen du vill flytta objekt till. (”ny” -mapp) och klicka på ”Jämför” -knappen
- I den högra panelen väljer du att utesluta: ”identisk” och ”Ändrad höger”. På detta sätt kommer du att y se filer som saknas i den ”nya” mappen och ignorera filer som du kanske har lagt till i den ”nya” mappen.
- Flytta filer manuellt i Finder eller låt FileMerge göra det genom att välja ett alternativ i Rullgardinsmenyn ”Sammanfoga” i den högra panelen.
Kommentarer
- Jag vill välja det här svaret eftersom
opendiff
kan betraktas som nästan ” buntade ” med OS X men när jag försöker skilja två mappar öppnade den en ful vy som inte var så lätt att förstå och jag kunde inte se hur slår jag samman två filer i filvy. Jag ’ är säker på att det är möjligt men om den här grundläggande funktionen inte är uppenbar, föredrar jag att leta efter något bättre;) - FileMerge är inte så bra som BeyondCompare, på lång sikt. Men det är gratis och för ett engångskrav att ’ är det pris jag letade efter 🙂
Svar
Inbyggt verktyg för macOS och Linux
Om du inte tänker använda terminalen, diff
-kommandot kan jämföra kataloger.
Det här verktyget finns också i de flesta Linux-distributioner.
diff -rq directory1/ directory2/
-r
indikerar återfall genom underkataloger och -q
ger korta utdata (dvs visar inte de faktiska skillnaderna, notera bara vilka filer / dirs som är olika).
Andra användbara alternativ är:
-s
rapporterar identiska filer,
-i
ignorerar fall i filinnehåll,
--ignore-file-name-case
ignorera fall när du jämför filnamn.
Om du vill undvika varningar (mestadels användningsvarningar) om skillnader i .DS_Store
filer och använd sedan:
diff -rq directory1/ directory2/ | grep -v .DS_Store
Kommentarer
- Du kan utesluta undermappar direkt med
diff --exclude node_modules
- Ännu bättre, du kan använda
diff -x node_modules
Svar
Diffmerge borde uppfylla alla dina krav.
Kommentarer
- Jag hoppas bara att de kommer att göra ett installationsprogram som kommer att kunna installera kommandoradsstarterna och förbättra den aktuella installationsupplevelsen.
- Detta är ett gammalt ämne – men jag installerade det via
brew cask install diffmerge
och det installerades utan problem. - Apr 2016: Det underhålls fortfarande och fortfarande ett av mina utvecklingsverktyg.
- FWIW Jag försökte
brew cask install diffmerge
idag (juni 2020) och när jag försökte köra diffmerge fick jag en varningsruta som berättade att MacOS inte ’ t skulle köra programmet eftersom det kan ’ t verifiera utvecklaren. (diffmerge kördes inte) - @MikeTheTall Är inte ’ t som vanligt för appar som inte kommer från app store? Försökte du direkt Ctrl-klicka på appikonen och välj sedan
open
från snabbmenyn?
Svar
Ett annat snyggt verktyg för att uppnå detta är rsync, som beskrivs på Unix & Linux StackExchange .För att jämföra två mappar kan du göra
rsync -avun $SOURCE $TARGET
Och om du verkligen är orolig för filkonsistens / bitrotning finns det också alternativet c för att jämföra filkontrollsummor
rsync -avnc $SOURCE $TARGET
Kommentarer
- Stor referens för dess användbarhet på alla Unix 🙏🏻.
Svar
Jag köpte nyligen en kopia av Kalejdoskop (ca. $ 40 US). Det är en ren app.
vimdiff är också tillgänglig via kommandoraden och är bärbar över de flesta UNIXy-domäner.
Kommentarer
- Jag ’ har använt kalejdoskop i några månader nu. Värt priset. Det säljs ibland.
- Kalejdoskop tillåter dig inte att redigera en fil, värdelös!
- Pris på Kalejdoskop i App Store 2020: 74,99 euro
Svar
Du bör prova den kraftfulla programvaran med öppen källkod meld . Mac-versionen kan hittas på Meld för OSX . Det stöder både katalog- och filjämförelse och fungerar bra under Mac.
Jag fick höra att förbättra detta svara och förklara varför meld är bra. Generellt sett är Meld en mjukvarujämförelseprogramvara som huvudsakligen används i GNOME. Det är bättre än mycket programvara som listas här eftersom
- det är gratis och öppen källkod Så ja du behöver inte oroa dig för avgiften eller säkerheten
- om inte mer kraftfull, det är lika sofistikerat som en hel del programvara som ber dig mycket pengar
- det är användar- vänlig och involverar inte komplex konfiguration eller skrivkommando i terminalen. Du bör kunna använda den omedelbart när du har installerat den.
Den del som den inte är lika bra kan vara att den är utvecklad under GTK. Så ibland känns det inte som naturliga MAC-program. Dessutom var de gamla MAC-versionerna lite buggy. Men den senaste 3.19.2 som jag för närvarande använder fungerar bra och jag har aldrig mött ett problem.
Kommentarer
- Installationen är också enkel med
brew cask install meld
Svar
Diff-verktyget som kommer med Bare Bones-programvarans text Wrangler har katalogjämförelse, även om den bara visar vilka filer som finns i båda katalogerna och vilka som bara finns i vart och ett av katalogerna. När du väljer en fil som finns i båda kan du redigera genom att slå samman ändringar rad för rad med ett klick på en knapp. Du kan dock inte flytta filer. Du måste göra detta externt (t.ex. via Finder).
Jag tycker att det är ett av de bättre gratisalternativen.
Svar
Jag använder Mappsynkronisering Det kostar $ 8,99 på Mac App Store Det fungerar riktigt snyggt.
Svar
Jag har jämfört stora mappstrukturer (DVD) tidigare och jag hade utvecklat ett kommandoradsverktyg för att göra detta. Jag har nyligen gjort verktyget (CrcCheckCopy) gratis och plattformsoberoende (MacOS och Windows).
CrcCheckCopy skannar källmappen och skapar en fil som innehåller CRC-stämplarna för alla filer. Den här filen används sedan för att jämföra målmappen.
Du kan hämta den härifrån: https://www.starmessagesoftware.com/crccheckcopy Din feedback du uppskattas mycket.
Svar
Ändringsapp ($ 37,19) brukade vara min wo rkforce för detta. Det är lika bra som Beyond Compare.
Obs: Jag hoppas att denna kvalitetsbedömning får existera, även om det strider mot åtminstone SO-normer för att slå upp produkter. Behovet av ett användbart, intuitivt, grafiskt jämförelseverktyg för macOS förblir akut. Open source-kandidater har inte nått den användbarhetsnivå som de kommersiella verktygen tillhandahåller.
Svar
Om du vet hur du kör Python , här är ett skript som jag skrev för en tid sedan för att effektivt jämföra två kataloger.
Funktioner:
- det kan jämföra trädstrukturer och filändringar (baserat på filstorlek & MD5-hash)
- kan stänga av filjämförelse, visar bara ändringar i trädstrukturen (mycket snabbt!)
- kan stänga av jämförelse av filinnehåll , enbart förlitar sig på ändringar av filstorlek (igen, mycket snabbt)
- kan färga utdata för bättre läsbarhet.
Och kan naturligtvis modifieras efter dina behov, om du vet hur man programmerar.
#!/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")
Länk till GitHub Gist.
OBS: det fungerar inte för filerna eller underkatalogerna som flyttades till iCloud.
Svar
Enklast lösning: Synkronisera filer med Dropbox eller liknande, använd bara WinMerge i Windows.
FileMerge-verktyget som levereras med Xcode jämför inte mappar och slår inte samman / redigerar.
Lämna ett svar