1

基本的にバックアップを作成するために、7日ごとにpythonを介してディレクトリ全体をある場所から別の場所にコピーしようとしています...

バックアップフォルダー/ツリーフォルダーは存在する場合と存在しない場合があるため、存在しない場合はフォルダーを作成する必要があるためdistutilsshutil

: 上記のジョブにバッチまたは他の言語を使用する方がよいでしょうか?

次のコード:

import distutils
distutils.dir_util.copy_tree("C:\Users\A\Desktop\Test", "C:\Users\A\Desktop\test_new", preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=1, verbose=0, dry_run=0)

戻り値:

Traceback (most recent call last):
  File "C:\Users\A\Desktop\test.py", line 2, in <module>
    distutils.dir_util.copy_tree("C:\Users\A\Desktop\test", "C:\Users\A\Desktop\test2", preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=1, verbose=0, dry_run=0)
AttributeError: 'module' object has no attribute 'dir_util'

私は何を間違っていますか?

前もって感謝します-Hyflex

4

3 に答える 3

8

dir_utilその機能にアクセスするには、特にインポートする必要があります。

from distutils import dir_util

そのパッケージに必要な他のモジュールがある場合は、それらをコンマで区切って行に追加します。必要なモジュールのみをインポートします。

于 2013-10-01T01:06:10.357 に答える
3

Unix/Linux の場合は、' rsync ' をお勧めします。Windows の場合: xcopy

于 2013-09-30T14:54:49.660 に答える
0

私は本質的に同じことを試みて、大量の仮想マシンで書いたものをバックアップしました。

distutils で行ったのと同じ問題に遭遇しました。私が知る限り、Python コミュニティは distutils モジュールを使用して、新しいモジュールが Python とどのようにインターフェースするかの標準化を開始しています。私がこれに関連して私が見たものはすべてより複雑に見えるので、彼らはまだその真っ只中にいると思います. うまくいけば、私は大きな変化の最中に起こるすべての狂気を見ているだけです.

しかし、私はそれを機能させる方法を理解しました。distutil.dir_util.copytree() を使用するには、

>>> from distutils import dir_util
>>> dir_util.copy_tree("/home/user/backing_up/temp", "/home/user/backing_up/other")
['/home/user/backing_up/other/stuff.txt']     # Return value indicating success

価値があると思われる場合は、distutils.core をインポートして、distutils.dir_util.copy_tree() をより長く呼び出すことができます。

>>> import distutils.core
>>> distutils.dir_util.copy_tree("/home/user/backing_up/temp", "/home/user/backing_up/other")
['/home/user/backing_up/other/stuff.txt']     # Return value indicating success

(「import module.submodule」と「from module import submodule」には微妙な違いがあることは知っていますが、それは質問の意図ではなく、正しいものをインポートして関数を適切に呼び出す限り、違いはありません。)

あなたと同じように、preserve_mode と preserve_times のデフォルトが必要だと明示的に述べましたが、他の変数には触れませんでした。関数をインポートして呼び出すと、すべてが期待どおりに機能しました。

バックアップ スクリプトが機能するようになったので、マシンが特定のランレベルになるたびに実行する予定なので、Bash で作成する必要があったことに気付きました。書き直すだけでも、代わりにラッパーを使用しています。

于 2013-11-15T21:22:13.957 に答える