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%
Rsync
gebruiken:
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 -u
optie 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 Rsync
en 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>