1

すべてのディレクトリとファイルをコピーしてフォルダーに入れる機能を作成しようとしています。このディレクトリにはバックアップ フォルダがないため、最初にコピー ツリーを使用してフォルダを作成し、このプログラムを再実行するたびに、再度バックアップを作成する必要があります (以前のバックアップを含む)。copytree が巨大な再帰ループに陥るという問題があり、何が間違っているのかわかりません。これが私のコードです。1回目は動くのですが、2回目で動かなくなってしまいます。argv[1] は、バックアップするローカル フォルダーです。これは次のように実行されます。

% python3 ファイル名 フォルダ名

from os import path, walk, remove, mkdir, listdir
from sys import argv
from shutil import copytree


    if path.exists(argv[1]+'/Versions'):
        copytree(argv[1], argv[1]+ '/Versions/' + str((len(listdir(argv[1]+'/Versions')))+1))

    else:

        copytree(argv[1], argv[1]+'/Versions/1')

Versions フォルダーが既に存在する場合は、サブフォルダーの数をカウントし、そのラベル +1 存在するフォルダーの数で新しいフォルダーを作成します。

4

1 に答える 1

2

バックアップしているフォルダーのサブフォルダーにバックアップを作成しているようです。

次にスクリプトを実行すると、バックアップのバックアップが作成され、次にバックアップのバックアップのバックアップが作成されます。

元のデータのサブフォルダーではない場所にバックアップを配置すると、スクリプトが機能するはずです。

source_path = os.path.join(argv[1], '/Versions')
destination_path = os.path.join(argv[1], '..', '/Backup') 

#Now handle copying between these two locations
...

Ignore メソッドの使用

または、 callable を に渡して、copytree特定のディレクトリを無視することもできます。

from shutil import copytree, ignore_patterns

copytree(source_path, destination_path, ignore=ignore_patterns('Versions'))
于 2014-06-06T23:33:30.853 に答える