Die gelieferten Antworten sind nur für gelegentliche Vergleiche geeignet. Beim Testen von Software sind sie jedoch nicht ausreichend, um diese Art von Vergleichen mehrmals pro Stunde durchzuführen. Ich könnte geneigt sein, den diff-Quellcode zu modifizieren, um diese Vergleiche aufzunehmen.
Michael Gantz
Antworten:
7
Ich habe dies getan, bevor ich mich daran rsync -aHAX --deleteerinnere, die Flags -nund hinzugefügt zu haben -i.
Dies ist ein wenig eingängig, aber ertragen Sie es mit mir. Der Hauptbefehl rsyncist das, was Sie benötigen würden, um die beiden Verzeichnisse miteinander zu synchronisieren. Aber -n -ies verursacht nicht für die Synchronisierung (dh einen Trockenlauf zu tun) und druckt nur heraus , was es getan hätte und warum. Das Parsen ist nicht fantastisch, aber Sie können den Dateinamen einfach rausholen und per Pipe zu lsoder ähnlichem senden.
Dies wird alles betrachten, einschließlich MTIMES, DATUMS usw., und auch Geräteknoten, Sockets, Named Pipes usw. nicht verfolgen. Die obige Befehlszeile befasst sich auch mit ACLs und erweiterten Attributen. Sie können das, was Sie sehen, anpassen, indem Sie die Optionen auf ändern rsync, es auf ein Gerät mit beschränken -x, das Soft- und Hardlink-Verhalten ändern usw. usw.
find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b
diff -u a b
Und man 1 statsagt:
%A access rights in human readable form
%C SELinux security context string
%F file type
%g group ID of owner
%u user ID of owner
%s total size, in bytes
%Y time of last modification, seconds since Epoch
%n file name
Zum Vergleichen des Dateiinhalts können Sie Folgendes verwenden:
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash
Diese Lösung bietet keine praktikable Lösung. Das angezeigte Diff ist kontextfrei und zu schwer lesbar. Ich suche nach etwas, das mir einen Dateinamen zeigt und was daran anders ist. Kein Unterschied zwischen zwei Funden, was ein völlig anderes Tier ist.
Michael Gantz
1
GNU findhat die Funktionen von GNU stateingebaut (und ist um Jahrzehnte älter als GNU stat). Sie sollten die Ausgabe auch sortieren, bevor Sie sie unterscheiden. Und du brauchst (cd /a && find . ...)sonst werden sich alle Zeilen wegen /avs /bim Dateipfad unterscheiden.
Stéphane Chazelas
0
Hier ist ein schnelles Bash-Skript, das ich geschrieben habe, um erweiterte Attribute zu vergleichen. Es druckt jeden Dateinamen und dann alle Unterschiede in den Attributen aus:
cd a
export relpath=[path/to/b/from/a]
for filename in $(find .);
do
echo $filename;
diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done
Angelehnt an eine andere Antwort, können wir dies ändern zu verwenden , statstatt xattr:
for filename in $(find .);
do
echo $filename;
diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done
Antworten:
Ich habe dies getan, bevor ich mich daran
rsync -aHAX --delete
erinnere, die Flags-n
und hinzugefügt zu haben-i
.Dies ist ein wenig eingängig, aber ertragen Sie es mit mir. Der Hauptbefehl
rsync
ist das, was Sie benötigen würden, um die beiden Verzeichnisse miteinander zu synchronisieren. Aber-n -i
es verursacht nicht für die Synchronisierung (dh einen Trockenlauf zu tun) und druckt nur heraus , was es getan hätte und warum. Das Parsen ist nicht fantastisch, aber Sie können den Dateinamen einfach rausholen und per Pipe zuls
oder ähnlichem senden.Dies wird alles betrachten, einschließlich MTIMES, DATUMS usw., und auch Geräteknoten, Sockets, Named Pipes usw. nicht verfolgen. Die obige Befehlszeile befasst sich auch mit ACLs und erweiterten Attributen. Sie können das, was Sie sehen, anpassen, indem Sie die Optionen auf ändern
rsync
, es auf ein Gerät mit beschränken-x
, das Soft- und Hardlink-Verhalten ändern usw. usw.quelle
janos hat schon gesagt was zu tun ist:
Und
man 1 stat
sagt:Zum Vergleichen des Dateiinhalts können Sie Folgendes verwenden:
quelle
find
hat die Funktionen von GNUstat
eingebaut (und ist um Jahrzehnte älter als GNU stat). Sie sollten die Ausgabe auch sortieren, bevor Sie sie unterscheiden. Und du brauchst(cd /a && find . ...)
sonst werden sich alle Zeilen wegen/a
vs/b
im Dateipfad unterscheiden.Hier ist ein schnelles Bash-Skript, das ich geschrieben habe, um erweiterte Attribute zu vergleichen. Es druckt jeden Dateinamen und dann alle Unterschiede in den Attributen aus:
Angelehnt an eine andere Antwort, können wir dies ändern zu verwenden ,
stat
stattxattr
:quelle