Gegenprüfen von Dateien und Ordnern mit Ausschluss möglich?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Medds
User
Beiträge: 27
Registriert: Samstag 17. Oktober 2020, 19:19

Hallo,
ich habe mir ein Backup-Script geschrieben, bei dem am Ende eine Überprüfung kommt, ob die Ordner- und Dateianzahl von Ausgangs- und Zielpfad übereinstimmen.
Das Backup-Script führt letztendlich einen rsync-Befehl aus bei dem man mittels einer Exclude-File bestimmte Dateien und Ordner ausschließen kann die nicht kopiert werden sollen.
Das ist leider dann auch das Problem, warum die Ordner- und Dateianzahl nicht übereinstimmen.
Gibt es eine Möglichkeit bei der Überprüfung der Ordner- und Dateianzahl die Exclude-File mit einzubeziehen?

So überprüfe ich die Ordner- und Dateianzahl:

Code: Alles auswählen

    def count_em(self):
        v_dirs = 0
        v_files = 0
        for root, dirs, files in os.walk(self.pfad):
            for d in dirs:
                v_dirs += 1
            for f in files:
                v_files += 1
        print('Es sind ', v_dirs, 'Verzeichnisse und ', v_files, 'Dateien ab dem Pfad:', str(self.pfad), 'vorhanden!')
        return v_dirs, v_files
Und so sieht der Inhalt der Exclude-File (am Beispiel eines der Backups) für den Rsync-Befehl aus:

Code: Alles auswählen

*tmp*
*temp*
*cache*
Trash/
node_modules/
steamapps/
Downloads/
lost+found/
Vielen Dank im Voraus

Gruß Thomas
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich glaube, Du kannst rsync vertrauen, dass es das richtige macht.

Welche `em´ willst Du denn zählen? Ich dachte, Du willst Verzeichnisse und Dateien zählen.
Was soll das v_-Präfix bei v_dirs und v_files? Benutze aussagekräftige Namen und keine kryptischen Anhängsel. os.walk liefert listen, deren Länge man einfach ermitteln kann.

Code: Alles auswählen

    def count_dirs_and_files(self):
        number_of_dirs = 0
        number_of_files = 0
        for root, dirs, files in os.walk(self.pfad):
            number_of_dirs += len(dirs)
            number_of_files += len(files)
        print(f'Es sind {number_of_dirs} Verzeichnisse und {number_of_files} Dateien ab dem Pfad {self.pfad} vorhanden!')
        return number_of_dirs, number_of_files
Medds
User
Beiträge: 27
Registriert: Samstag 17. Oktober 2020, 19:19

Mit der Namensgebung tue ich mich ehrlich gesagt noch etwas schwer.
Da es dirs und files schon im Script gibt hab ich mit v_dirs für die Variable von dirs weiter gemacht um keine doppelten Variablen zu erhalten genommen. Ich weiß das ist nicht gut so, aber bin leider immer wieder entweder zu unkreativ bzw. tu mich schwer mit dem Konventionen.
Das count_em hab ich leider abgeschrieben, weil ich das

Code: Alles auswählen

 for root, dirs, files in os.walk(self.pfad):  
nicht kannte.

Das ich dem rsync vertrauen kann, hab ich mir eigentlich schon gedacht, aber es wäre interessant gewesen, dies zu überprüfen.
Aber das wird wohl nicht so einfach gehen wie ich gedacht hätte.
Hatte gehofft, das man die Ausnahmen in die for-Schleife mit einbeziehen kann, aber mir fehlt der Ansatz.
Antworten