Visa ändringar jämför två linux-filer. Filer - linux filjämförelse gui. Döljer identiska rader

Operativsystemet Linux har flera mjukvarulösningar för att jämföra det interna innehållet i två filer med olika metoder. Naturligtvis kommer en sådan funktion att vara otroligt användbar för en webbutvecklare att jämföra två textfiler. Till exempel finns det 2 css-stilfiler som du snabbt måste jämföra för att hitta skillnaderna. Eller se vad som är nytt i det uppdaterade PHP-skriptet.

Ett tydligt exempel från livet:

Så i mitt fall måste jag jämföra 2 filer bootstrap.css. I somras korrigerade jag något i stilarna i filen bootstrap.css (vilket inte gick att göra, för för anpassade stilredigeringar behöver du använda en separat style.css). På grund av denna lilla sak är det problematiskt för mig att uppgradera från version 3.3.2 till bootstrap 3.3.5, eftersom... den nyare versionen har sin egen uppdaterade CSS-fil, när den ersätts försvinner alla mina redigeringar och en del av webbdesignen kommer att "flyga iväg". Med tanke på att det finns mer än 6000 rader kod i bootstrap-stilfilen är det absolut omöjligt att se ändringarna själv.

Jämföra filer med diff-verktyget i Linux:

För att jämföra filerna `bootstrap.css" och `bootstrap-original.css" (för tydlighetens skull döpte jag om originalfilen och lade till prefixet -original till den), skriv in i terminalen: $ diff bootstrap.css bootstrap-original. css I konsolen fick vi standardrapporten skillnaderna i dessa filer. Om du behöver spara rapporten automatiskt till en separat fil på disk, skicka utdata från diff-resultaten till filen $ diff bootstrap.css bootstrap-original.css > сss-modifications.diff Nu kommer hela rapporten om filskillnader att bli sparas i samma mapp under namnet " сss-modifications.diff"Denna utdata visar dock inte tydligt var och vad som lades till eller togs bort av mig. För att tydligare se hur de två filerna skiljer sig kan du använda sdiff; Skillnaden med detta paket är att det inte genererar en skillnadsrapport. Genom att ordna båda filerna i två kolumner visar den omedelbart skillnaderna i båda filerna. `|" markerar rader som skiljer sig från varandra `" markerar rader som bara förekommer i den andra filen.

Kommandosyntaxen liknar diff:

$ sdiff bootstrap.css bootstrap-original.css Vi matar ut skillnaderna till konsolen och med kommandot: $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff Vi skriver hela rapporten i en separat fil. Jag skulle också rekommendera att lägga till argumentet -t för ett mer läsbart diff-rapportformat (som uppnås genom att anpassa avstånden mellan tabeller med mellanslag). Annars öppnas standardrapporten bra i gedit, men i Sublime kommer den att "suddar": $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff -t P.S. Möjligheterna att jämföra filer i Linux slutar inte där och du kan till och med jämföra 3 filer samtidigt. Använd kommandot för att göra detta För att jämföra tre filer samtidigt, använd diff3. $ diff3 bootstrap.css bootstrap-original.css bootstrap-3.css > new.diff

Vanligtvis genererar diff utdata i följande format:

$diff fil1 fil2 2c2< Helllo --- >Hallå

Men det finns en speciell kommandoradsparameter (-y) som säger åt verktyget att mata ut data i två separata kolumner. Och det här är ett exempel på sådan utdata:

$ diff -y file1 file2 Hej Hej Hej | Hej hej hej

Uppenbarligen, när du använder detta utdataformat, "|"-tecknet används för att markera olika linjer.

5. Döljer identiska rader

Om du tittar noggrant på utdata från föregående exempel (från avsnitt 4 ovan), kommer du att upptäcka att när du använder kommandoradsalternativet -y, matar diff-verktyget ut inte bara de ändrade raderna utan också de identiska raderna i filerna den bearbetar. Om du behöver ta bort identiska rader från utgången kan du använda alternativet --suppress-common-lines.

$ diff -y --suppress-common-lines fil1 fil2 Hej | Hallå

6. Skriver ut namnen på C-språkfunktioner som innehåller modifierad kod

När du använder diff-verktyget för att jämföra två C-källkodsfiler kan du använda ett speciellt alternativ (-p) som säger åt verktyget att skriva ut namnen på funktioner där ändringar upptäcktes. Anta till exempel att du vill jämföra följande två C-källkodsfiler:

Fil med namnet file1.c:

#omfatta void compare(float x, float y) ( if(x == y) // felaktigt sätt att jämföra ( printf("\n ÄR LIKA med \n"); ) ) int main(void) ( compare(1.234, 1.56789 ); return 0;

Fil med namnet fil 2:

#omfatta void compare(float x, float y) ( if(x == y) ( printf("\n ÄR LIKA med \n"); ) ) int main(void) ( compare(1.234, 1.56789); return 0; )

Detta är resultatet av en normal jämförelse av dessa filer:

$ diff fil1.c fil2.c 5c5< if(x == y) // некорректный способ сравнения --- >om(x == y)

Och detta är resultatet av att jämföra samma filer med parametern -p:

$ diff -p fil1.c fil2.c *** fil1.c 2016-12-29 11:45:36.587010816 +0530 --- fil2.c 2016-12-29 11:46:39.823013274 +0530 **** *********** *** 2.8 **** void compare(float x, float y) ( ! if(x == y) // felaktigt sätt att jämföra ( printf("\n ÄR LIKA med \n"); ) --- 2,8 ---- void compare(float x, float y) ( ! if(x == y) ( printf("\n ÄR LIKA med \n"); )

Uppenbarligen, om kommandoradsalternativet -p används, genererar diff mer utförlig utdata, och markerar modifierade rader med ett utropstecken ("!").

7. Rekursiv jämförelse av innehållet i underkataloger

Diff-verktyget låter dig också jämföra innehållet i underkataloger rekursivt, men detta funktionsläge är inte aktiverat som standard. Jag menade att när du använder det här kommandot:

$ diff diff-filer/ andra-diff-filer/ diff diff-filer/fil1 andra-diff-filer/fil1 1c1< Hi --- >i diff diff-filer/fil2 andra-diff-filer/fil2 2c2< Hello --- >hej

Diff-verktyget kommer endast att jämföra filer från toppnivåkataloger, men om du använder parametern -r (aktiverar det rekursiva filjämförelseläget), kommer det att jämföra även de filer som finns i underkataloger:

$ diff -r diff-filer/ andra-diff-filer/ diff -r diff-filer/fil1 andra-diff-filer/fil1 1c1< Hi --- >i diff -r diff-filer/fil2 andra-diff-filer/fil2 2c2< Hello --- >ello diff -r diff-filer/fler-diff-filer/fil1 andra-diff-filer/fler-diff-filer/fil1 1c1< Hi --- >i diff -r diff-filer/fler-diff-filer/fil2 andra-diff-filer/fler-diff-filer/fil2 2c2< Hello --- >hej

8. Behandla saknade filer som tomma

Diff-verktyget stöder också ett alternativ där du kan säga åt det att behandla saknade filer som tomma. Om du jämför filer med namnet fil1 och fil3 (och den senare filen existerar inte), kommer som standard att diff ger ett felmeddelande:

$ diff fil1 fil3 diff: fil3: Ingen sådan fil eller katalog

Det är inget fel; i själva verket är detta beteende helt berättigat. Men det finns tillfällen då du vill undvika felmeddelanden (kanske när du använder diff inom skalskript) där du kan använda alternativet -N för att behandla saknade filer som tomma och fortsätta jämföra filer.

$ diff -N fil1 fil3 1.5d0< Hi < < Helllo < < Bye

Slutsats

Om du noggrant har läst båda artiklarna i serien och självständigt upprepat alla kommandoexempel som diskuteras i dem, är det fullt möjligt att säga att du har behärskat alla grundläggande färdigheter för att arbeta med verktyget i fråga. Naturligtvis kunde vi inte diskutera alla frågor relaterade till diff i flera artiklar, men ändå nämndes alla huvudfunktioner och funktioner i detta verktyg i dem på ett eller annat sätt.

Om du vill veta lite mer om det här verktyget kan du alltid hänvisa till dess manualsida. Jag tycker att det inte är värt att nämna ännu en gång att du regelbundet bör använda verktyget med olika uppsättningar parametrar för att simulera olika arbetssituationer.

Webbansvariga eller webbplatsägare behöver ofta jämföra två filer baserat på innehåll. Från den här artikeln kommer du att lära dig hur du jämför två filer med varandra. Alla metoder som jag känner till för att jämföra textfiler och skript (html, css, php, och så vidare) beskrivs här.

Metod 1. Meld

Meld- ett grafiskt verktyg för att erhålla skillnader och slå samman två filer, två kataloger. Meld är ett visuellt verktyg för jämförelse av filer och kataloger för Linux. Meld riktar sig främst till utvecklare. Det kan dock vara användbart för alla användare som behöver ett bra verktyg för att jämföra filer och kataloger.

I Meld kan du jämföra två eller tre filer, eller två eller tre kataloger. Du kan se arbetskopian från populära versionskontrollsystem som CVS, Subversion, Bazaar-NG och Mercurial. Meld är tillgängligt för de flesta Linux-distributioner (Ubuntu, Suse, Fedora, etc.) och finns i deras huvudlager.

# aptitude installation meld

Metod 2: Jämföra innehållet i två filer i WinMerge.

Det kostnadsfria programmet WinMerge låter dig jämföra inte bara innehållet i filer, det jämför också innehållet i hela mappar. WinMerge är ett diff- och sammanslagningsverktyg med öppen källkod för Windows. WinMerge kan jämföra både filer och mappar och visa skillnaderna i en visuell textform som är lätt att förstå och bearbeta.

Efter installationen, öppna menyalternativet "Arkiv" - "Öppna". Välj filer att jämföra. För att göra detta, klicka på "Bläddra"-knappen och välj en fil. När du har valt filerna klickar du på knappen "OK".

Du kan också redigera filer i WinMerge. Efter att ha stängt jämförelsefönstret kommer programmet att erbjuda att spara ändringarna i filerna.

Metod 3. diff

diff- filjämförelseverktyg som visar skillnaden mellan två filer.

    För att jämföra kataloger använd detta kommando: $ diff -qr< current-directory> < backup-directory>

Metod 4. Kompare

Kompare - visar skillnader mellan filer. Kan jämföra innehållet i filer eller kataloger, samt skapa, visa och tillämpa korrigeringsfiler. Kompare är ett grafiskt diff-verktyg som låter dig hitta skillnader i filer och även slå samman dem. Skrivet i Qt och designat främst för KDE. Här är dess huvudfunktioner:

    Stöder flera diff-format;

    Stöd jämförelse av linux-filer och kataloger;

    Stöd för visning av diff-filer;

    Anpassningsbart gränssnitt;

    Skapa och applicera patchar på filer.

Metod 5. Jämföra filer i Total Commander

    Operativsystem som stöds: Windows

Total Commander har ett filjämförelseverktyg efter innehåll, där du inte bara kan jämföra innehåll, utan också redigera det och kopiera det från en fil till en annan.

Efter att ha startat Total Commander - i en av panelerna, välj (Infoga nyckel) den första filen för jämförelse - i den andra panelen, öppna mappen med den andra filen och placera markören på den. Ring programmet för jämförelse: "Filer→ Jämför efter innehåll."

För att göra ändringar i filen klickar du bara på knappen "Redigera". Programmet erbjuder kopierings- och återställnings-, sök- och kodningsfunktioner. Om du har gjort ändringar i filen kommer du att bli ombedd att spara ändringarna efter att ha stängt jämförelsefönstret.

Metod 6. Jämför filer i Notepad++

    Operativsystem som stöds: Windows, kan köras på Linux

Notepad++ kan inte jämföra filer. För att den här funktionen ska visas i Notepad++ måste du installera insticksprogrammet "Compare".

Starta redigeraren - gå till menyalternativet "Plugins" - "Plugin Manager" - "Visa Plugin Manager". I det nya fönstret väljer du "Jämför" plugin och klickar på knappen "Installera".

Efter att ha installerat plugin, öppna två filer och välj menyn "Plugins" - "Compare" - "Compare (Alt+D)". Resultatet av filjämförelsen kommer att presenteras i separata paneler. En varningsskylt kommer att visas mittemot linjerna där skillnader finns.

Metod 7: Jämföra filer med Windows kommandotolk

Jämförelse med Windows-kommandoraden (cmd.exe) tillåter dig inte att redigera filer, men du kan helt enkelt jämföra innehållet i filer med den här metoden.

För att öppna Windows-kommandoraden, gå till "Start" - "Alla program" - "Tillbehör" - "Kommandotolk" eller tryck på "Windows + R", skriv cmd och tryck på Enter-tangenten.

Vid kommandotolken anger du kommandot:

fc / N sökväg till den första filen sökväg till den andra filen

), deras jämförelser, såväl som jämförelser av GUI-klienter för dem. Det fanns också diskussioner om IDE-plugins för att arbeta med git och mercurial. Men praktiskt taget det fanns ingen information om visuell jämförelse och kombinera konfliktlösningsverktyg.

Jag "hoppade" nyligen från mercurial (som jag fortfarande tycker är bekvämare och mer logiskt) till git, eftersom de allra flesta projekt som är intressanta för mig använder git och finns på github. I detta avseende uppstod frågan om att revidera arsenalen av verktyg, i synnerhet frågan val av verktyg visuell jämförelse och sammanslagning (diff and merge). För att fylla bristen på information om navet bestämde jag mig för att skriva denna minirecension. Som de säger - i hetjakt.

Under snittet hittar du även exempel på Git-inställningar för användning med DiffMerge och WinMerge under Windows. Jag tror att det kommer att spara mycket tid.

namn Egenheter Plattform

KDiff3

Git och WinMerge

1) Lägg till i katalogen c:/Git/libexec/git-core/mergetools/
winmerge-fil med följande innehåll:

Diff_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Program Files (x86) )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 status=$?)
När Git misslyckas med att automatiskt slå samman ändringar, uppstår en sammanslagningskonflikt och sammanslagningsmarkörer läggs till i konfliktfilen (<<<<<<<, =======, и >>>>>>>). De är nödvändiga för att lösa konflikten med hjälp av tredjepartsverktyg.
Låt oss titta på filen readme.txt som bildas som ett resultat av sammanslagna grenar mästare och ny i exemplet ovan:

<<<<<<< HEAD master str ======= new str >>>>>>> ny
Vi kan öppna konfliktfilen med WinMerge-programmet för att lösa konflikten.

Detta öppnar tvåvägssammanfogningsverktyget:

Baserat på den beskrivna logiken kommer vi att skriva om kommandot merge merge_cmd på följande sätt:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
Faktum är att båda alternativen ovan är likvärdiga.

2) Låt oss redigera .gitconfig
tool = winmerge cmd = "winmerge" verktyg = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
den sista raden avbryter lagring av säkerhetskopior i förvarskatalogen.

3) Låt oss skapa en konflikt när vi slår samman två grenar (se exempel med användning av DiffMerge).
git difftool master new // jämför två grenar

För att lösa konflikten när du slår samman grenar, använd kommandot
git mergetool

För att jämföra två eller flera filer i Linux finns kommandot diff. Den kan jämföra både enskilda filer och kataloger. Låt oss titta på syntaxen, alternativen för kommandot diff och några användningsexempel.

diff kommandosyntax

Kommandot diff har följande syntax:

Diff [alternativ] filer-eller-kataloger

Vi anger alternativ och tillhandahåller två eller flera filer eller kataloger som vi behöver jämföra.

diff kommandoalternativ

Låt oss titta på huvudalternativen för kommandot diff. Jag kommer bara att överväga de alternativ som jag använder oftast.

-EIgnorera ändringar som orsakas av att ett tabbtecken lagts till i texten.
-bIgnorera ändringar som orsakas av att lägga till mellanslag.
-wIgnorera ändringar som innebär att du lägger till mellanslag och flikar.
-Bignorera nya tomma rader.
-p (eller --show-c-funktion)visa namnet på C-språkfunktionen där ändringar hittades.
-y (eller --side-by-side)visa resultaten i två kolumner.
-rbläddra i kataloger rekursivt.
-X FILexkludera från sökfiler vars namn matchar mönster i FILE-filen.
-d (eller --minimal)försök hitta så få ändringar som möjligt (det vill säga utesluta falska positiva).

Exempel på användning av kommandot diff

Jämför två textfiler

För att helt enkelt jämföra två textfiler med namnet myfile1 och myfile2, kör kommandot i terminalen:

Diff minfil1 minfil2

Det är bekvämt att omdirigera utdata från diff-kommandot till en fil med diff-tillägget. De flesta Linux-textredigerare, som Gedit, känner igen den här filen och markerar dess syntax. För att rikta resultatet av jämförelsen till filen changes.diff måste du använda symbolen för strömomdirigering (>):

Diff minfil1 minfil2 > ändringar.diff

Jämförelse av kataloger som innehåller textfiler

Låt oss titta på ett exempel på att jämföra två kataloger (mydir1 och mydir2) som innehåller textfiler. Den största skillnaden här från exemplet ovan är att vi kommer att lägga till alternativet -r, vilket betyder att det rekursivt kommer att gå igenom filer i kataloger.

Diff -r mydir1 mydir2 > ändringar.diff

Låt oss nu anta att katalogerna där vi jämför filer innehåller mycket "skräp" som vi inte bör jämföra. Låt oss skapa en fil excludeFiles och skriva in mönster och namn på filer som vi inte ska jämföra. Till exempel kan innehållet i excludeFiles se ut så här:

*.o ChangeLog* *.bak *.exe

Låt oss nu berätta för diff-kommandot att använda vår excludeFiles-fil när du jämför kataloger:

Diff -r -X excludeFiles mydir1 mydir2 > ändringar.diff

Således jämför vi filer vars namn inte matchar mönstren i excludeFiles-filen, till exempel vasya.exe eller ChangeLog12.

Låt oss lägga till några fler alternativ som beskrivs ovan för att förbättra jämförelseresultatet:

Diff -rwBd -X excludeFiles mydir1 mydir2 > ändringar.diff

Vi jämför filer i katalogerna mydir1 och mydir2, ignorerar ändringar på grund av att vi lägger till tomma rader, blanksteg, tabbar och använder även filnamnsmönster i excludeFiles för att utesluta onödiga filer från jämförelsen.

Slutsats

För mer information om hur du använder kommandot diff på ditt Linux-system kan du köra kommandot:

Man diff

Det finns även program som låter dig jämföra filer med hjälp av ett grafiskt gränssnitt. Till exempel programmet Meld, som visuellt visar var och vad som har ändrats i filerna.