Seite 1 von 1

Kopieren von Dateien

Verfasst: Sonntag 12. Februar 2017, 12:57
von setiinch
hallo,

hab mir ein kleinen Code geschrieben, welcher mit alle .txt Dateien anzeigen lassen und mir in ein bestimmtes Verzeichnis kopieren soll.
Allerdings kopiert er mir nur die .txt Files welche in meinem Arbeitsverzeichnis liegen und nicht alle die er ab dem Wurzelverzeichnis findet.

Code: Alles auswählen

   ziel = '/home/user/Python/temp'
    for root, dirs, files in os.walk('.'):
        for file in files:
            if file.endswith(".txt"):
                #print(os.path.abspath(".")
                print(os.path.join(root, file))
                print(os.getcwd())
                shutil.copy2(file, ziel)
hätte jem evtl eine Idee ? mfg

Re: Kopieren von Dateien

Verfasst: Sonntag 12. Februar 2017, 13:18
von nezzcarth
Na ja, der '.' in Zeile 2 steht in dem Kontext nun mal für das aktuelle Arbeitsverzeichnis. Wenn du etwas anderes möchtest, musst du da etwas anderes hinschreiben. Wenn du das root-Verzeichnis mit "Wurzelverzeichnis" meinst und wirklich den gesamten Verzeichnisbaum absuchen möchtest, also z.B. '/'.

Übrigens: An sich ist dafür kein eigenes Skript notwendig; das lässt sich auch in einer Zeile mit 'find' erledigen.

Code: Alles auswählen

find . -iname "*.txt" -exec cp {} /home/user/Python/temp/ ; 

Re: Kopieren von Dateien

Verfasst: Sonntag 12. Februar 2017, 14:20
von setiinch
Wenn ich statt dem '.' das Symbol für das Wurzelverzeichnis ' / ' ersetze erhalte ich folgenden Fehler:

IOError: [Errno 2] No such file or directory: 'bla.txt'

meine Vermutung ist das er mit relativen Pfaden beim durchsuchen und kopieren der Verzeichnisstruktur nicht klarkommt.
Wenn ich für den Kopierbefehl absolute Pfade verwende, kopiert er auch außerhalb des Arbeitsverzeichnis die Dateien ohne Problem.
Jetzt war die Idee relative Pfade in absoulute Pfade mit einem Befehl umzuwandeln .!?. und dann zu kopieren, aber das ging auch nicht ...

Re: Kopieren von Dateien

Verfasst: Sonntag 12. Februar 2017, 15:23
von BlackJack
@setiinch: Du musst die Pfade halt entsprechend mit `os.path.join()` zusammensetzen. Machst Du ja auch schon für den Quellpfad, nur dass Du den einfach nur ausgibst, aber nicht im Programm verwendest.

Re: Kopieren von Dateien

Verfasst: Montag 13. Februar 2017, 20:04
von setiinch
ok Problem wie folgt gelöst:

Code: Alles auswählen

os.system('find / -name "*.py" -exec cp {} /home/user/Python/temp \;')
der os.walk ansatz wollte nicht so richtig funktionieren.. danke für die hilfe ;)

Re: Kopieren von Dateien

Verfasst: Montag 13. Februar 2017, 20:24
von nezzcarth
setiinch hat geschrieben:

Code: Alles auswählen

os.system('find / -name "*.py" -exec cp {} /home/user/Python/temp \;')
Oh, diese Verwendung war eigentlich nicht meine Intention, als ich sie vorgeschlagen habe; externe Aufrufe für Dinge, die Python selbst beherrscht, sind eher ungünstig.