Seite 1 von 1

Dateien und Ordner rekursiv kopieren

Verfasst: Donnerstag 21. Januar 2021, 22:00
von ptofrme
Hallo zusammen,

ich würde gerne Dateien und Ordner gerne rekursiv kopieren d. h. ich würde gerne ein Quellpfad angeben, dann soll dort alles rekursiv durchgegangen werden und Dateien und Ordner an einem Zielpfad erstellt werden.

Code: Alles auswählen

quellPfad = "C:\\pythonTest\\quelle\\"
zielPfad = "C:\\pythonTest\\ziel\\"

for dirpath, dirnames, filenames in os.walk(quellPfad, topdown=True):

	for dir in dirnames:
		# Was fehlt hier an Code?
	for file in filenames:
		# Was fehlt hier an Code?
	

Soweit habe ich den Teil hinbekommen. Ich denke ich muss dann immer alle Ordner und alle Dateien in den for-Schleifen durchlaufen. Wie kopiere ich aber die jeweiligen Ordner und Dateien von der Quelle zum jeweiligen Ziel? Ist mein Ansatz überhaupt richtig?


Ich bin Programmieranfänger.

Über Hilfe würde ich mich freuen und wünsche euch einen schönen Abend!

Re: Dateien und Ordner rekursiv kopieren

Verfasst: Donnerstag 21. Januar 2021, 22:52
von Sirius3
Dafür gibt es schon shutil.copytree.

Re: Dateien und Ordner rekursiv kopieren

Verfasst: Freitag 22. Januar 2021, 16:40
von ptofrme
Hi, danke für deine Antwort.

Ich möchte aber noch prüfen ob sich die Checksummen der Datei von Quelle und Ziel unterscheiden. Wenn ja, wird die Datei am Ziel umbenannt und erst dann wieder eine Kopie übertragen. Auf der zweiten NAS läuft dann ein Bash Skript was danach die Rechte für das Ändern/Löschen der Kopieren Dateien der Quell-NAS entzieht. Somit werden automatisch Backups erstellt und es ist ein Schutz vor Ransomware, denn wenn dieser auf der Quelle die Dateien verschlüsselt habe ich immer noch die alten Dateien im Zielsystem.

Den Teil der Berechnung der Checksumme etc. habe ich bereits gelöst. Auch das prüfen ob ein Ordner oder Datei vorhanden ist. Lediglich das Kopieren klappt nicht.

Hast du oder vielleicht jemand anderes eine Idee welche Befehle ich an dieser Stelle verwenden kann? Also für das reine kopieren eines Ordners/Datei. Das Problem ist, dass ich den Teil im Pfad nicht ausgetauscht bekomme.

Re: Dateien und Ordner rekursiv kopieren

Verfasst: Freitag 22. Januar 2021, 16:51
von Bl3nder
Hier findest du die Doku https://docs.python.org/3/library/shutil.html


Ich verstehe nicht ganz was du mit Checksumme meinst ( meinst du die Datei größe )?

Wenn ja da du mit os arbeitest:
os.path.getsize("pfad_zu_deiner_datei")

Sowas in der Art -> habe Ich nun nicht getestet

Code: Alles auswählen

quellPfad = "C:\\pythonTest\\quelle"
zielPfad = "C:\\pythonTest\\ziel"
for file in os.listdir(zielPfad):
    quell_file = os.path.join(quellPfad,file)
    ziel_file = os.path.join(zielPfad,file)
    if os.path.isfile(quell_file):#True wenn Datei vorhanden
        if os.path.getsize(quell_file) != os.path.getsize(ziel_file):#Datein unterschiedlich groß
            shutil.copy(str(quell_file), str(ziel_file))
    else:
        shutil.copy(str(quell_file), str(ziel_file))

Re: Dateien und Ordner rekursiv kopieren

Verfasst: Freitag 22. Januar 2021, 17:25
von Bl3nder
Ich habe eben gesehen das noch ein continue in der for schleife fehlt Ich kann leider meinen Beitrag aber nicht mehr bearbeiten

Re: Dateien und Ordner rekursiv kopieren

Verfasst: Freitag 22. Januar 2021, 20:23
von Sirius3
@Bl3nder: bei einem Backup-Programm will man vielleicht nicht nur die Dateigröße prüfen.
`os.path` ist veraltet. Benutze pathlib.Path. Und irgendwie sind Quell- und Zielpfad vertauscht.