Hvilke verktøy for katalogsammenligning kan jeg bruke på OS X?
On februar 10, 2021 by adminJeg leter etter et verktøy som er i stand til å sammenligne kataloger, ikke bare filer. Det er også viktig å kunne ringe verktøyet fra kommandolinjen.
Det ville være flott å ha et gratis verktøy, hvis ikke gratis, angi prisen.
Svar
For alle googlerne … sjekk ut Beyond Compare regjerer det. Koster 30 $ eller 50 $ for Pro-versjonen.
Kommentarer
- Jeg prøver vanligvis å unngå å anbefale kommersiell løsning når gratis og åpen kildekode-alternativer finnes, men BeyondCompare er et spesielt tilfelle der det er verdt hver krone … og er også multi-plattform. Jeg har brukt den i mer enn 10 år og ventet lenge på å få MacOS-versjonen.
- Det er nå april 2020 og pro-versjonen koster nå $ 60.
- I ‘ har prøvd alle løsningene på denne siden, og jeg synes Beyond Compare er 100% den beste og mest verdige anbefalingen.
Svar
FileMerge (gratis), leveres med Xcode, tilbyr en katalogvisning.
En kommandolinjeversjon er tilgjengelig via Terminal-applikasjonen.
Her kan du sammenligne to kataloger med FileMerge:
- ⌘ + mellomrom, skriv inn «FileMerge» og åpne den.
- Klikk på «venstre» -knappen og velg mappen du vil flytte elementer FRA. (Den «gamle» mappen)
- Klikk på «høyre» -knappen og velg mappen du ønsker å flytte elementene TIL. («ny» mappe) og klikke på «Sammenlign» -knappen
- I høyre panel velger du å ekskludere: «identisk» og «Endret høyre». På denne måten vil du bare y se filer som mangler i den «nye» mappen og ignorere filer du kanskje har lagt til i den «nye» mappen.
- Flytt filer manuelt i Finder eller la FileMerge gjøre det, ved å velge et alternativ i Rullegardinmenyen «Slå sammen» i høyre panel.
Kommentarer
- Jeg vil gjerne velge dette svaret fordi
opendiff
kan betraktes som nesten » samlet » med OS X, men når jeg prøver å skille mellom to mapper, åpnet den en stygg visning som ikke var så lett å forstå, og jeg klarte heller ikke å se hvordan jeg slår sammen to filer i filvisningen. Jeg ‘ er sikker på at det er mulig, men hvis denne grunnleggende funksjonen ikke er åpenbar, vil jeg foretrekke å se etter noe bedre;) - FileMerge er ikke så bra som BeyondCompare, med et langt skudd. Men det er gratis, og for et engangskrav at ‘ er prisen jeg lette etter 🙂
Svar
Innebygd verktøy for macOS og Linux
Hvis du ikke har noe imot å bruke terminalen, vil diff
-kommandoen kan sammenligne kataloger.
Dette verktøyet er også tilgjengelig i de fleste Linux-distribusjoner.
diff -rq directory1/ directory2/
-r
indikerer resurse gjennom underkataloger, og -q
gir kort utdata (dvs. ikke viser de faktiske forskjellene, bare merk deg hvilke filer / dirs som er forskjellige).
Andre nyttige alternativer er:
-s
rapporterer identiske filer,
-i
ignorerer store og små bokstaver i filinnholdet,
--ignore-file-name-case
ignorerer sak når du sammenligner filnavn.
Hvis du vil unngå advarsler (for det meste bruksvarsler) om forskjeller i .DS_Store
filer, bruk deretter:
diff -rq directory1/ directory2/ | grep -v .DS_Store
Kommentarer
- Du kan ekskludere undermapper direkte ved å
diff --exclude node_modules
- Enda bedre, du kan bruke
diff -x node_modules
Svar
Diffmerge skal oppfylle alle dine krav.
Kommentarer
- Jeg håper bare at de vil lage et installasjonsprogram som vil kunne installere kommandolinjestarterne og forbedre den nåværende installasjonsopplevelsen.
- Dette er et gammelt emne – men jeg installerte det via
brew cask install diffmerge
og det installerte uten problemer. - Apr 2016: Det blir fortsatt vedlikeholdt, og fortsatt et av mine utviklingsverktøy.
- FWIW Jeg prøvde
brew cask install diffmerge
i dag (juni 2020), og da jeg prøvde å kjøre diffmerge, fikk jeg en varselboks som fortalte meg at MacOS ikke ‘ ikke skulle kjøre programmet fordi det kan ‘ t bekreft utvikleren. (diffmerge kjørte ikke) - @MikeTheTall Er ikke ‘ t som vanlig for apper som ikke er fra app store? Prøvde du direkte Ctrl-klikk på appikonet og velg deretter
open
fra hurtigmenyen?
Svar
Et annet pent verktøy for å oppnå dette er rsync, som beskrevet på Unix & Linux StackExchange .For å sammenligne to mapper kan du gjøre
rsync -avun $SOURCE $TARGET
Og hvis du er veldig bekymret for filkonsistens / bitrot, er det også c-alternativet for å sammenligne filkontrollsummer
rsync -avnc $SOURCE $TARGET
Kommentarer
- Flott referanse for sin brukbarhet på alle Unixes .
Svar
Jeg kjøpte nylig en kopi av Kalejdoskop (ca. $ 40 US). Det er en ren app.
vimdiff er også tilgjengelig via kommandolinjen og er bærbar på de fleste UNIXy domener.
Kommentarer
- Jeg ‘ har brukt kalejdoskop i noen måneder nå. Verdt prisen. Den kommer i salg innimellom.
- Kalejdoskop tillater ikke at du kan redigere en fil, ubrukelig!
- Kaleidoskoppris i App Store i 2020: 74,99 euro
Svar
Du bør prøve den kraftige programvaren med åpen kildekode meld . Mac-versjonen finner du på Meld for OSX . Den støtter både sammenligning av kataloger og filer og fungerer bra under Mac.
Jeg fikk beskjed om å forbedre dette svare på og forklare hvorfor meld er bra. Generelt sett er Meld en programvare for full sammenligning av funksjoner, hovedsakelig brukt i GNOME. Det er bedre enn mye programvare som er oppført her, fordi
- den er gratis og åpen Så ja du trenger ikke å bekymre deg for gebyret eller sikkerheten
- hvis ikke mer kraftig, er det like sofistikert som mye programvare som ber deg mye penger
- det er bruker- vennlig og involverer ikke kompleks konfigurasjon eller skrivekommando i terminalen. Du bør kunne bruke den umiddelbart når du har installert den.
Den delen at den ikke er så god, kan være at den er utviklet under GTK. Så noen ganger føles det ikke som natur-MAC-programmer. Dessuten var de gamle MAC-versjonene litt buggy. Men den siste 3.19.2 som jeg bruker for øyeblikket fungerer bra, og jeg har aldri møtt et problem.
Kommentarer
- Installasjonen er også enkel med
brew cask install meld
Svar
Diff-verktøyet som følger med Bare Bones Softwares Text Wrangler har katalogsammenligning, selv om den bare viser hvilke filer som er i begge katalogene, og hvilke som bare er i hver av katalogene. Når du velger en fil som i begge deler kan du redigere ved å slå sammen endringene linje for linje med et klikk på en knapp. Det lar deg ikke flytte filer skjønt. Du må gjøre dette eksternt (f.eks. Via Finder).
Jeg synes det er et av de bedre gratisalternativene.
Svar
Jeg bruker Mappesynkronisering Det koster $ 8,99 på Mac App Store Det fungerer veldig bra.
Svar
Jeg har sammenlignet store mappestrukturer (DVDer) tidligere, og jeg hadde utviklet et kommandolinjeverktøy for å gjøre dette. Jeg har nylig gjort verktøyet (CrcCheckCopy) gratis og plattformoverskridende (MacOS og Windows).
CrcCheckCopy skanner kildemappen og oppretter en fil som inneholder CRC-stemplene til alle filene. Deretter brukes denne filen til å sammenligne målmappen.
Du kan få den herfra: https://www.starmessagesoftware.com/crccheckcopy Din tilbakemelding du blir satt stor pris på.
Svar
Endringsappen ($ 37,19) pleide å være min uke rkforce for dette. Det er like bra som Beyond Compare.
Merk: Jeg håper denne kvalitetssikringen får lov til å eksistere, selv om det er i strid med i det minste SO-normer for å søke etter produkter. Behovet for et brukbart, intuitivt, grafisk sammenligningsverktøy for macOS er fortsatt akutt. Kandidater med åpen kildekode har ikke nådd det bruksnivået som de kommersielle verktøyene gir.
Svar
Hvis du vet hvordan du skal kjøre Python , her er et skript som jeg skrev for en tid tilbake for effektivt å sammenligne to kataloger.
Funksjoner:
- det kan sammenligne trestrukturer og filendringer (basert på filstørrelse & MD5 hashes)
- kan slå av sammenligning av filer, viser bare endringer i trestruktur (veldig raskt!)
- kan slå av sammenligning av filinnhold , bare å stole på endringer i filstørrelse (igjen, veldig raskt)
- kan fargelegge utdataene for bedre lesbarhet.
Og kan naturligvis endre i henhold til dine behov, hvis du vet hvordan du programmerer.
#!/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")
Link til GitHub Gist.
MERK: det fungerer ikke for filene eller underkatalogene som ble flyttet til iCloud.
Svar
Enklest løsning: Synkroniser filer ved hjelp av Dropbox eller lignende, så er det bare å bruke WinMerge på Windows.
FileMerge-verktøyet som leveres med Xcode, sammenligner ikke mapper og slår ikke sammen / redigerer.
Legg igjen en kommentar