ubuntuusers.de

Ordnerstrukturen zuverlässig vergleichen

Status: Ungelöst | Ubuntu-Version: Kubuntu 22.04 (Jammy Jellyfish)
Antworten |

lg51

Anmeldungsdatum:
24. Dezember 2007

Beiträge: 462

Hallo

Ich sitze hier mal wieder an einem Problem, dass mich seit Jahren bzw. inzwischen eher seit Jahrzehnten stört: die graphischen Dateimanager in Kubuntu sind nicht dazu in der Lage, zuverlässig Auskunft über den Inhalt eines Ordners zu geben.

Gegenwärtig möchte ich sicherstellen, dass ein grosser Ordner (ca. 10TB) den ich von NAS1 auf NAS2 kopiert habe dort auch vollständig angekommen ist.

Der Dolphin Dateimanager berechnet mir hier nach abgeschlossendem Kopiervorgang deutlich abweichende Werte:

NAS1:

393756 Dateien in 26737 Ordnern

NAS2:

358470 Dateien in 24440 Ordnern

Auch das in Kubuntu integrierte Tool "Filelight" welches Aufschluss über die Grösse von Ordnern und deren Unterordnern angibt, erzielt wiederum deutlich abweichende Zahlen (sowohl abweichend zwischen den beiden NAS wie auch von den jeweiligen Dolphin Werten).

Ich habe es mit diff bzw. meld probiert, aber da diese Tools offenbar immer auch die Dateiinhalte vergleichen, ist das bei einer Datemnege von ca. 10TB unpraktikabel, da es Tage dauern würde.

Daher die Frage: gibt es ein Tool welches zuverlässig zwei Ordner vergleicht - und zwar nur darauf, ob die Ordnerstruktur und das Vorhandensein der darin befindlichen Dateien identisch ist (also quasi das "Inhaltsverzeichnis"), ohne dass die Sache Tage dauert, weil die ganzen Dateiinhalte auch abgeglichen werden?

Danke für eure Hinweise.

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3778

Da kann dir FreeFileSync helfen.

homer65

Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 570

Wohnort: bochum, germany

Habe mal ein einfaches Java Programm geschrieben, welches die gewünschte Auswertung machen sollte:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.File;
public class Main 
{
	private static long anzahlOrdner = 0;
	private static long anzahlDateien = 0;
	private static long anzahlHidden = 0;
	public static void main(String[] args) 
	{
		String dir = args[0];
		File fdir = new File(dir);
		zaehle(fdir);
		System.out.println("Anzahl Ordner : " + anzahlOrdner);
		System.out.println("Anzahl Hidden : " + anzahlHidden);
		System.out.println("Anzahl Dateien: " + anzahlDateien);
	}
	public static void zaehle(File fdir)
	{
		anzahlOrdner++;
		File[] files = fdir.listFiles();
		if (files != null)
		{
			for (int i=0;i<files.length;i++)
			{
				File file = files[i];
				if (file.isFile()) anzahlDateien++;
				else if (file.isHidden()) anzahlHidden++;
				else if (file.isDirectory()) zaehle(file);
			}
		}
	}
}

Edit: Bemerkung zur Ausführung: Den Codeblock als Main.java abspeichern. Dann: javac Main.java. Dann: java Main C:\. Wobei C:\ durch den zu untersuchenden Ordnernamen zu ersetzen ist.

shiro

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1214

Sorry, ich nutze da lieber die einfachen Werkzeuge des Betriebssystems statt einem GUI Programm, das ich nicht selbst geschrieben habe.

Ablauf: Erstelle ein Listing mit den von dir gewünschten Daten mittels "find" und vergleiche die mit "diff" (oder auch "meld").

for nas in NAS1 NAS2; do
 cd $i
 find -type f -printf "%07k|%TF %TX|%p\n" | sed 's/\.[0-9]\{10\}|/|/' | 
  column -t -s"|" -o"|" | sort -t"|" -k3 >~/Downloads/$i.txt
done
cd ~/Downloads
diff NAS1.txt NAS2.txt

Wenn dir erst mal Unterschiede in der Größe und dem Datum nicht interessieren, kannst du den "find" Befehl auch vereinfachen zu

 find -type f | sort >~/Downloads/$i.txt

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1232

Sehr schöne Lösung!

Aber muss es in der ersten Zeile nicht heissen

for i in NAS1 NAS2; do

?

shiro

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1214

juribel schrieb:

Aber muss es in der ersten Zeile nicht heissen

for i in NAS1 NAS2; do

?

korrekt ! (Sorry)

Gloster

Anmeldungsdatum:
9. April 2020

Beiträge: 417

Mit Beyond Compare kann man so etwas machen (30 Tage free trial), on Top tool.

Beyond Compare kann solche umfangreichen Kopier-Aktionen (Binär-Vergleich) überprüfen.

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1232

Sorry, aber sind wir hier bei Windows? Fremdquellen von irgendwoher runterladen müssen?

Gloster

Anmeldungsdatum:
9. April 2020

Beiträge: 417

Wir sind bei einem Problem, und wer möchte kann dieses Problem lösen, professionell, und nicht mit ideologischen Statements.

perlicon

Anmeldungsdatum:
18. Dezember 2023

Beiträge: 54

lg51 schrieb:

Daher die Frage: gibt es ein Tool welches zuverlässig zwei Ordner vergleicht - und zwar nur darauf, ob die Ordnerstruktur und das Vorhandensein der darin befindlichen Dateien identisch ist (also quasi das "Inhaltsverzeichnis"), ohne dass die Sache Tage dauert, weil die ganzen Dateiinhalte auch abgeglichen werden?

Keine Ahnung, wie zuverlässig das übers Netz funktioniert, aber vielleicht hilft

1
$ diff <(tree -s  quellpfad/) <(tree -s zielpfad/)

Gloster

Anmeldungsdatum:
9. April 2020

Beiträge: 417

lg51 hat es ausdrücklich formuliert : "... Vorhandensein der darin befindlichen Dateien identisch ist..."

Ob die Dateien überhaupt noch lesbar sind, interessiert ihn nicht.

Mein Hinweis gilt nur für die, denen auch die Identität der Daten wichtig ist.

perlicon

Anmeldungsdatum:
18. Dezember 2023

Beiträge: 54

Gloster schrieb:

lg51 hat es ausdrücklich formuliert : "... Vorhandensein der darin befindlichen Dateien identisch ist..."

Nur lese ich

(also quasi das "Inhaltsverzeichnis"), ohne dass die Sache Tage dauert, weil die ganzen Dateiinhalte auch abgeglichen werden?

so, dass (aus Geschwindigkeitsgründen) nur die Gleichheit der Metadaten geprüft werden soll.

Gloster

Anmeldungsdatum:
9. April 2020

Beiträge: 417

@perlicon,

ich habe doch nur die Sinnhaftigkeit reflektiert.

Der unsinnige Wunsch, ist klar

perlicon

Anmeldungsdatum:
18. Dezember 2023

Beiträge: 54

Achso, da stimme ich dir wiederum zu. Bei 10 TB kann man sich um die Integrität der Daten schon seriöse Gedanken machen.

lg51

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2007

Beiträge: 462

Danke für eure Rückmeldungen.

Es hat sich nun ergeben, dass auf dem neuen NAS (NAS2) offenbar die NFS-Implementierung kaputt ist (bzw. der Hersteller des NAS sagt, es liege daran, dass die von Linux verwendeten RichACLs nicht mit den POSIX ACLs übereinstimmen), weswegen ich gezwungen war, von NFS auf SMB/CIFS umzustellen.

Dies eröffnete mir auch die Möglichkeit, die Freigaben mal probeweise auf einem Windows-Gerät einzubinden (wo ich sie normalerweise nicht benötige, deswegen lief bisher alles nur auf NFS). Es stellt sich raus: der Date-Explorer von Windows liefert konsistente/übereinstimmende Angaben über die Zahl der Ordner und Dateien auf den beiden Geräten. Somit gehe ich davon aus, dass der Kopiervorgang zumindest vollständig war. (Im Übrigen liefert auch das Webinterface der beiden NAS diese übereinstimmenden Angaben.)

Noch zum Thema Binärvergleich/sind die Daten überhaupt noch lesbar: Nun, meiner Auffassung nach würde mir auch ein Binärvergleich keinen Aufschluss darüber geben, ob die Daten noch lesbar sind, sondern lediglich darüber, ob die auf dem Ziel angekommenen Daten identisch sind, mit den auf der Quelle vorhandenen Daten. Jene könnten ja aber auch bereits auf der Quelle nicht mehr lesbar sein, nachdem sie dort jahrelang rumlagen (bit rot). Aber es stimmt natürlich, dass auch bei der Übertragung allfällige zusätzliche Fehler dazu kommen können, insofern werde ich wohl auch noch dies prüfen müssen.

Das neue NAS läuft übrigens mit ZFS, sodass sich zumindest die Bit Rot Problematik reduzieren sollte.

Antworten |