Gegeven twee directorystructuren, hoe kan ik erachter komen welke bestanden verschillen qua inhoud?

Als ik de verschillen tussen twee mappenbomen wil vinden, voer ik meestal gewoon het volgende uit:

diff -r dir1/ dir2/

Dit geeft precies weer wat de verschillen zijn tussen corresponderende bestanden. Ik ben geïnteresseerd in het krijgen van een lijst met bijbehorende bestanden waarvan de inhoud verschilt. Ik nam aan dat dit gewoon een kwestie zou zijn van het doorgeven van een opdrachtregeloptie aan diff, maar ik kon niets vinden op de man-pagina.

Heeft u suggesties?


Antwoord 1, autoriteit 100%

Probeer:

diff  --brief --recursive dir1/ dir2/

Of anders, met de korte vlaggen -qr:

diff -qr dir1/ dir2/

Als u ook verschillen wilt zien voor bestanden die mogelijk niet in beide mappen voorkomen:

diff --brief --recursive --new-file dir1/ dir2/  # with long options
diff -qrN dir1/ dir2/                            # with short flag aliases

Antwoord 2, autoriteit 24%

Het commando dat ik gebruik is:

diff -qr dir1/ dir2/

Het is precies hetzelfde als dat van Mark 🙂 Maar zijn antwoord stoorde me omdat het verschillende typesvlaggen gebruikt, en het deed me twee keer kijken. Gebruikmakend van Marks meer uitgebreide vlaggen zou het zijn:

diff  --brief --recursive dir1/ dir2/

Mijn excuses voor het posten wanneer het andere antwoord volkomen acceptabel is. Kon mezelf er niet van weerhouden… om minder pedant te zijn.


Antwoord 3, autoriteit 10%

Ik gebruik graag git diff --no-index dir1/ dir2/, omdat het de verschillen in kleur kan laten zien (als je die optie hebt ingesteld in je git config) en omdat het laat zien alle verschillen in een lange pagina-uitvoer met “minder”.


Antwoord 4, autoriteit 3%

Rsyncgebruiken:

rsync --dry-run --recursive --delete --links --checksum --verbose /dir1/ /dir2/ > dirdiff_2.txt

Als alternatief, gebruik diff:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

Ze zijn functioneel gelijkwaardig, maar de prestaties kunnen variëren afhankelijk van:

  • Als de mappen op dezelfde schijf staan, is rsync sneller.
  • Als de mappen op twee aparte schijven staan, is diff sneller.

Dit komt doordat diff beide mappen parallel belast, waardoor de belasting van de twee schijven wordt gemaximaliseerd. rsync berekent controlesommen in grote delen voordat ze daadwerkelijk worden vergeleken. Dat groepeert de i/o-bewerkingen in grote brokken en leidt tot een efficiëntere verwerking wanneer dingen op één enkele schijf plaatsvinden.


Antwoord 5, autoriteit 2%

Meldis ook een geweldig hulpmiddel voor twee mappen vergelijken:

meld dir1/ dir2/

MELD heeft veel opties voor het vergelijken van bestanden of mappen. Als twee bestanden verschillen, is het eenvoudig om de bestandsvergelijkingsmodus in te voeren en de exacte verschillen te bekijken.


Antwoord 6

Kanaalcompatriot ‘Billings’ (van Freenode / # Centos-roem) deelde zijn methode met mij:

diff -Naur dir1/ dir2

Inclusief de definitieve map naar voren slash doet er niet toe.

Ook verschijnt het de -uoptie niet beschikbaar op enkele oudere / serverversies van DIFF.

Het verschil in diffs:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST
# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

Antwoord 7

Gebruik deze opdracht:

diff -qr dir1/ dir2/

-R Will Diff Alle subdirectory’s ook -q vertelt diff om alleen te melden wanneer bestanden verschillen.

diff  --brief dir1/ dir2/

– Korte toont de bestanden die in de directory bestaan.

of anders

We kunnen MELD gebruiken die in grafisch venster wordt weergegeven, het is gemakkelijk om het verschil te vinden.

meld  dir1/ dir2/

Antwoord 8

diffoscope is een geweldige opdrachtregel op de opdrachtregio Diff-tool.

Ik vind het vooral leuk dat het kan diff in bestanden:

Het zal recursief allerlei soorten archieven uitpakken en verschillende binaire formaten transformeren in een meer voor mensen leesbare vorm om ze te vergelijken. Het kan net zo gemakkelijk twee tarballs, ISO-afbeeldingen of PDF vergelijken.

Het vertelt je niet alleen welke bestanden verschillen, maar ook hoe ze verschillen.


Antwoord 9

Je kunt ookgebruik Rsyncen find. Voor find:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

Maar bestanden met dezelfde namen en in dezelfde submappen, maar met verschillende inhoud, worden niet weergegeven in de lijsten.

Als je een fan bent van GUI, kun je Melddat @Alexandergenoemd. Het werkt prima in zowel Windows als Linux.


Antwoord 10

Verschillen tussen dirA en dirB melden en tegelijkertijd bijwerken/synchroniseren:

rsync -auv <dirA> <dirB>

Other episodes