Quali strumenti di confronto delle directory posso utilizzare su OS X?
Su Febbraio 10, 2021 da adminSto cercando uno strumento in grado di confrontare directory, non solo file. Inoltre è importante poter richiamare lo strumento dalla riga di comando.
Sarebbe bello avere uno strumento gratuito, se non gratuito specifica il prezzo.
Risposta
Per tutti i googler … controlla Beyond Compare che regola. Costa 30 $ o 50 $ per la versione Pro.
Commenti
- Di solito cerco di evitare di consigliare soluzioni commerciali quando esistono alternative gratuite e open source ma BeyondCompare è un caso speciale in cui vale ogni centesimo … ed è anche multipiattaforma. Lo uso da più di 10 anni e ho aspettato troppo a lungo per ottenere la versione per MacOS.
- Ora è aprile 2020 e la versione pro ora costa $ 60.
- I ‘ ho provato tutte le soluzioni in questa pagina e penso che Beyond Compare sia al 100% la raccomandazione migliore e più degna.
Risposta
FileMerge (gratuito), fornito con Xcode, offre una visualizzazione della directory.
Una versione della riga di comando è disponibile tramite lapplicazione Terminale opendiff.
Ecco come confrontare due directory con FileMerge:
- ⌘ + spazio, digita “FileMerge” e aprilo.
- Fai clic sul pulsante “sinistra” e scegli la cartella dalla quale desideri spostare gli elementi. (La cartella “vecchia”)
- Fai clic sul pulsante “destra” e scegli la cartella da cui desidera spostare gli elementi in. (cartella “nuova”) e fare clic sul pulsante “Confronta”
- Nel pannello di destra, scegliere di escludere: “identico” e “Modificato a destra”. In questo modo lo farai solo vedi i file che mancano nella cartella “nuova” e ignori i file che potresti aver aggiunto nella cartella “nuova”.
- Sposta i file manualmente nel Finder o lascia che sia FileMerge, scegliendo unopzione nella Menu a discesa “Unisci” nel riquadro di destra.
Commenti
- Vorrei scegliere questa risposta perché
opendiff
potrebbe essere considerato quasi ” raggruppato ” con OS X ma quando provo a diffondere due cartelle si apre un brutta vista che non era così facile da capire e inoltre non sono stato in grado di vedere come faccio a unire due file nella vista file. Sono ‘ sono sicuro che sia possibile, ma se questa funzionalità di base non è ovvia, preferirò cercare qualcosa di meglio;) - FileMerge non è buono come BeyondCompare, di gran lunga. Ma è gratuito e per un requisito una tantum che ‘ è il prezzo che stavo cercando 🙂
Risposta
Utilità integrata per macOS e Linux
Se non ti dispiace usare il terminale, il diff
può confrontare le directory.
Questa utilità è disponibile anche nella maggior parte delle distribuzioni Linux.
diff -rq directory1/ directory2/
-r
indica la ricorsione attraverso le sottodirectory e -q
fornisce un breve output (ad esempio, non mostrare le differenze effettive, nota solo quali file / directory sono diversi).
Altre opzioni utili sono:
-s
segnala file identici,
-i
ignora maiuscole / minuscole nei contenuti del file,
--ignore-file-name-case
ignora le maiuscole / minuscole quando confronti i nomi dei file.
Se vuoi evitare avvisi (principalmente avvisi di utilità) sulle differenze nel .DS_Store
file, quindi utilizza:
diff -rq directory1/ directory2/ | grep -v .DS_Store
Commenti
- Puoi escludere le sottocartelle direttamente da
diff --exclude node_modules
- Ancora meglio, tu può utilizzare
diff -x node_modules
Risposta
Diffmerge dovrebbe soddisfare tutti i tuoi requisiti.
Commenti
- Spero solo che realizzino un programma di installazione che sarà in grado di installare gli avviatori della riga di comando e migliorare lesperienza di installazione corrente.
- Questo è un vecchio argomento, ma lho installato tramite
brew cask install diffmerge
ed è stato installato senza problemi. - Aprile 2016: è ancora mantenuto ed è ancora uno dei miei strumenti di sviluppo preferiti.
- FWIW Ho provato
brew cask install diffmerge
oggi (giugno 2020) e quando ho provato a eseguire diffmerge ho ricevuto una finestra di avviso che mi diceva che MacOS ‘ non avrebbe eseguito il programma perché ‘ t verifica lo sviluppatore. (diffmerge non è stato eseguito) - @MikeTheTall ‘ non è normale per le app non dellapp store? Hai provato direttamente Ctrl-clic sullicona dellapp e poi scegli
open
dal menu di scelta rapida?
Risposta
Un altro ottimo strumento per ottenere questo risultato è rsync, come descritto in Unix & Linux StackExchange .Per confrontare due cartelle puoi fare
rsync -avun $SOURCE $TARGET
E se sei veramente preoccupato per la consistenza dei file / bit rot cè anche lopzione c per confrontare i checksum dei file
rsync -avnc $SOURCE $TARGET
Commenti
- Ottimo riferimento per la sua utilità su tutti gli Unix 🙏🏻.
Answer
Recentemente ho acquistato una copia di Kaleidoscope (circa $ 40 USA). È “unapp pulita.
vimdiff è disponibile anche tramite la riga di comando ed è portabile sulla maggior parte dei domini UNIXy.
Commenti
- ‘ Uso Kaleidoscope da alcuni mesi. Vale il prezzo. È in vendita occasionalmente.
- Kaleidoscope non ti permette di modificare un file, inutile!
- Prezzo di Kaleidoscope in App Store nel 2020: 74,99 euro
Risposta
Dovresti provare il potente software open source meld . La versione per Mac può essere trovato su Meld for OSX . Supporta sia il confronto di file che di directory e funziona alla grande con Mac.
Mi è stato detto di migliorarlo rispondi e spiega perché meld è buono. In generale, Meld è un software di confronto completo delle funzionalità utilizzato principalmente in GNOME. È migliore di molti software elencati qui perché
- è gratuito e open source Quindi yo Non devi preoccuparti della tariffa o della sicurezza
- se non più potente, è sofisticato come un sacco di software che ti chiede un sacco di soldi
- è lutente- amichevole e non implica una configurazione complessa o la digitazione di comandi nel terminale. Dovresti essere in grado di usarlo immediatamente una volta installato.
La parte che non è così buona potrebbe essere che è sviluppato sotto GTK. Quindi a volte non sembra che i programmi MAC della natura. Inoltre, le vecchie versioni MAC erano un po buggate. Ma lultimo 3.19.2 che sto utilizzando attualmente funziona alla grande e non ho mai riscontrato alcun problema.
Commenti
- Anche linstallazione è facile con
brew cask install meld
Risposta
Lo strumento diff fornito con Bare Bones Software “s Text Wrangler ha il confronto delle directory, sebbene mostri solo quali file si trovano in entrambe le directory e quali sono solo in ciascuna delle directory. Quando selezioni un file che è in entrambi è possibile modificare unendo le modifiche riga per riga con il clic di un pulsante. Tuttavia, non ti consente di spostare i file. Devi farlo esternamente (ad esempio tramite Finder).
Trovo che sia una delle migliori opzioni gratuite.
Risposta
Uso Folder Sync Costa $ 8,99 su Mac App Store Funziona davvero bene.
Risposta
Ho confrontato grandi strutture di cartelle (DVD) in passato e avevo sviluppato unutilità della riga di comando per farlo. Recentemente ho reso lutilità (CrcCheckCopy) gratuita e multipiattaforma (MacOS e Windows).
CrcCheckCopy scansiona la cartella sorgente e crea un file contenente i timbri CRC di tutti i file. Quindi, questo file viene utilizzato per confrontare la cartella di destinazione.
Puoi ottenerlo da qui: https://www.starmessagesoftware.com/crccheckcopy Il tuo feedback sarà molto apprezzato.
Rispondi
Cambia app ($ 37,19) era il mio wo rkforce per questo. È buono come Beyond Compare.
Nota: spero che questo QA possa esistere, anche se è contro almeno le norme SO da proporre per i prodotti. La necessità di uno strumento di confronto grafico delle directory utilizzabile, intuitivo per macOS rimane acuta. I candidati open source non hanno raggiunto il livello di usabilità fornito dagli strumenti commerciali.
Rispondi
Se sai come eseguire Python , ecco uno script che ho scritto qualche tempo fa per confrontare in modo efficiente due directory.
Caratteristiche:
- può confrontare le strutture ad albero e le modifiche ai file (in base alla dimensione del file & hash MD5)
- può disattivare il confronto dei file, mostrando solo le modifiche alla struttura ad albero (molto veloce!)
- può disattivare il confronto del contenuto dei file , basandosi solo sulle modifiche alle dimensioni del file (di nuovo, molto velocemente)
- può colorare loutput per una migliore leggibilità.
E, naturalmente, può modificare in base alle proprie esigenze, se sai programmare.
#!/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 a GitHub Gist.
NOTA: non funzionerà per i file o le sottodirectory che sono stati spostati su iCloud.
Risposta
Il più semplice soluzione: sincronizza il file file utilizzando Dropbox o simili, quindi usa semplicemente WinMerge su Windows.
Lutility FileMerge fornita con Xcode non confronta le cartelle e non unisce / modifica.
Lascia un commento