Socketdateien während diff -r ausschließen

637
Mateusz Konieczny

diffhat eine Option --recursive( -r), um einen Vergleich zwischen zwei Verzeichnissen (den darin enthaltenen Dateien) durchzuführen. Gibt es eine Möglichkeit diff, alle Socketdateien und nur Socketdateien zu ignorieren?

Ich verwende diff --brief -r --no-dereference /var/ /media/mateusz/Database/tmp/duplicity_unpack/var/einen Teil meines Backups und werde von Einträgen wie überflutet Only in /var/lib/samba/private/msg.sock: 10001. Bei diesen Dateien handelt es sich um Socketdateien, die von Duplicity nicht gesichert werden konnten. Dies bedeutet nicht, dass eine Sicherung fehlgeschlagen ist.

Ich bin mir bewusst, dass ich möglicherweise meine eigene Verarbeitung der Ausgabe schreibe, aber dies kann zu Fehlern führen, erfordert mehr Zeit und verlangt von mir, eine Liste der Socketdateien im Dateisystem zu führen.

Beachten Sie, dass leere Ordner im Vergleich nicht ignoriert werden sollten.

0

1 Antwort auf die Frage

1
AFH

Ich glaube nicht, dass dies diffohne Codeänderungen mit sich selbst möglich ist . Sie müssen finddie erforderlichen Dateien auflisten, die Sie dann diffohne Rekursion weitergeben können:

find /var/ -type f -exec diff {} /media/mateusz/Database/tmp/duplicity_unpack{} \; 

Dies findet nur normale Dateien, da ich beim Anrufen diffmit einem anderen Typ keinen Sinn sehe, also keine Sockets, FIFOs, Verzeichnisse, Gerätedateien usw.

Ich werde es versuchen, aber ich mache mir Sorgen, dass es an einer großen Anzahl von Dateien sterben wird ... Mateusz Konieczny vor 7 Jahren 0
Sie sollten kein Problem haben: `diff` hat bei jedem Aufruf nur zwei Dateien, und bei 'find' gibt es keine bekannten Einschränkungen für die Anzahl der Dateien, obwohl ich denke, dass die Tiefe und Länge der Pfade ein gewisses Limit haben muss. Sie können jede Datei in Ihrem Root-Dateisystem mit `find /` auflisten, so dass `find / var /` keine Probleme darstellen sollte. AFH vor 7 Jahren 0
Dies hat ein ernstes Problem - es ist blind für leere Ordner. Aus irgendeinem Grund betrachtet find Socket-Dateien als Verzeichnisse (`-type f -o -type d` bringt Sockets zurück). Mateusz Konieczny vor 7 Jahren 0
@MateuszKonieczny - Ich verstehe Ihren Kommentar überhaupt nicht: `find` stimmt _nicht_ nicht mit den Sockets von` -type d` überein (zumindest nicht mit Ubuntu), der Fragesteller möchte _exclude_-Sockets und `diff` nicht verarbeiten Verzeichnisse (außer implizit mit `-r`). Um Sockets zu finden, verwenden Sie `-type s '. AFH vor 7 Jahren 0
"find passt nicht zu sockets auf -type d (zumindest nicht auf Ubuntu)", wie ich es verstehe (siehe zum Beispiel http://superuser.com/review/suggested-edits/552975), führt es zu einer Auflistung Mateusz Konieczny vor 7 Jahren 0
@MateuszKonieczny - Dieser Link zu Ihrem vorgeschlagenen Editiervorgang (den ich als falsch abgelehnt habe) nimmt die gleiche Änderung vor, die Sie in Ihrem vorherigen Kommentar vorgeschlagen haben. Er funktioniert nicht und beantwortet auch nicht die Frage. AFH vor 7 Jahren 0
Ich ging zurück zu dieser Aufgabe und entdeckte ein Problem - dies findet keine Dateien, die nur in `media / mateusz / Database / tmp / duplicity_unpack / var /` vorhanden sind und nicht in `/ var /` vorhanden sind. In diesem Fall kann es nützlich sein (im Fall von Dateien, die nur im Backup vorhanden sind, ist dies nicht in Ordnung, aber eher seltener Fehlermodus), ist jedoch im Allgemeinen nicht gleichwertig. Mateusz Konieczny vor 7 Jahren 0
@MateuszKonieczny - You can use the search the other way round: find files in the back-up and compare with what's currently in `/var/`, though this changes the requirements of the original question. The `-exec` command will not work as above unless you `cd` to the back-up directory, but instead you can pipe the file list to a script which will strip the leading directory elements, as in `find /media/mateusz/Database/tmp/duplicity_unpack/var/ -type f|while read f; do diff "$f" "$; done`. AFH vor 7 Jahren 0