2009-01-18 9 views
9

ich eine Website von einem Server auf einen anderen verschoben haben, und ich kopiert die Dateien SCP mitWie kann ich überprüfen, ob zwei Ordner die gleichen sind in Linux

Ich möchte nun prüfen, ob alle Dateien OK kopiert wurden .

Wie kann ich die Websites vergleichen?

Dateien für einen Ordner zählen?

Erhalten Sie die gesamte Dateigröße für Ordnerbaum?

oder gibt es eine bessere Möglichkeit, die Websites zu vergleichen?

Paul

Antwort

11

Wenn Sie scp verwendet haben, haben Sie wahrscheinlich rsync verwendet könnten.

rsync überträgt keine Dateien, die bereits auf dem neuesten Stand sind. Sie können damit überprüfen, ob eine Kopie aktuell ist, indem Sie einfach rsync erneut ausführen.

Wenn Sie waren so etwas wie dies auf dem alten Host tun:

scp -r from/my/dir newhost:/to/new/dir 

Dann könnten Sie etwas tun, wie

rsync -a --progress from/my/dir newhost:/to/new/dir 

Die ‚-a‘ für ‚Archiv‘ kurz ist, die eine tut rekursive Kopie und erhält Berechtigungen, Eigentümerschaften usw. Überprüfen Sie die man page für weitere Informationen, da es eine Menge cleverer Dinge tun kann.

0

Make-Prüfsummen für alle Dateien, beispielsweise mit md5sum. Wenn sie für alle Dateien gleich sind und keine Datei fehlt, ist alles in Ordnung.

0

Versuchen Sie diffing Ihr Verzeichnis rekursiv. Sie erhalten eine nette Zusammenfassung, wenn etwas in einem der Verzeichnisse anders ist.

7
cd website 
find . -type f -print | sort | xargs sha1sum 

erzeugt eine Liste von Prüfsummen für die Dateien. Sie können dann diff diese sehen, wenn es fehlende/hinzugefügt/andere Dateien gibt.

2

vielleicht können Sie etwas ähnliches verwenden:

find <original root dir> | xargs md5sum > original 
find <new root dir> | xargs md5sum > new 
diff original new 
1

Wenn Sie scp verwendet, werden Sie wahrscheinlich auch rsync über ssh nutzen können.

rsync -avH --delete-after 1.example.com:/path/to/your/dir 2.example.com:/path/to/your/ 

rsync erledigt die Prüfsummen für Sie.

Verwenden Sie die Option -n, um einen Trockenlauf durchzuführen. Überprüfen Sie die Handbuchseite.

Ich bevorzuge rsync über scp oder sogar lokale cp, jedes Mal kann ich es verwenden.

Wenn rsync keine Option ist, kann md5sum MD5-Digests generieren und md5sumc --check prüft sie.

0

Ich war von einem Server zum anderen eine Website verschiebe ich die Dateien mit SCP kopiert

du mit rsync tun könnte, ist es toll, wenn Sie wollen einfach nur etwas spiegeln.

/Johan

Update: Scheinen, wie @rjack mich mit 6 Sekunden mit der rsync Antwort schlagen :-)

19

Verwendung von diff mit der rekursiven -r und schnelle -q Option. Es ist der beste und bei weitem schnellste Weg, dies zu tun.

diff -r -q /path/to/dir1 /path/to/dir2 

Es wird Ihnen nicht sagen, was die Unterschiede sind (entfernen Sie die Option -q, das zu sehen), aber es wird Sie sehr schnell feststellen, ob alle Dateien gleich sind.

Wenn keine Ausgabe angezeigt wird, sind alle Dateien identisch, andernfalls werden die Dateien aufgelistet, die sich unterscheiden.

+0

es funktioniert. Aber die Beschreibung, die Sie gegeben haben, könnte falsch sein. Meinst du "Es wird nicht zeigen, wenn Dateien gleich sind und nur wenn es Unterschiede gibt" – smilyface

+0

Danke smilyface, ich habe die Beschreibung aktualisiert, um das klarer zu machen. – phayes

0

Ich würde dies Douglas Leeder oder Eineki hinzufügen, aber leider nicht genug Ruf zu kommentieren. Wie auch immer, ihre Antworten sind beide großartig, außer dass sie nicht für Dateinamen mit Leerzeichen funktionieren. Um diese Arbeit zu machen, tue

find [dir1] -type f -print0 | xargs -0 [preferred hash function] > [file1] 

find [dir2] -type f -print0 | xargs -0 [preferred hash function] > [file2] 

diff -y [file1] [file2] 

gerade von experimentieren, Ich mag auch in eine Datei, die -W ### arguement auf diff und Ausgabe, die es zu nutzen, einfacher zu analysieren und im Terminal zu verstehen.

+0

Diese Methode kann leere Verzeichnisse nicht überprüfen, und Sie müssen das Ergebnis sortieren. – zidarsk8

0

Um eine Antwort von Sidney hinzuzufügen. Es ist nicht sehr notwendig, den Typ f zu filtern und Hashcode zu erzeugen. Als Antwort auf zidarsk8 müssen Sie nicht sortieren, da find wie ls die Dateinamen standardmäßig alphabetisch sortiert. Es funktioniert auch für leere Verzeichnisse.

Zusammengefasst Top-3 beste Antworten wären: (P. S. Nizza einen Testlauf mit rsync zu tun)

diff -r -q /path/to/dir1 /path/to/dir2 

diff <(cd dir1 && find) <(cd dir2 && find) 

rsync --dry-run -avh from/my/dir newhost:/to/new/dir 
Verwandte Themen