シンプルな自家製データバックアップ2(Python + DropBox)

バックアップ用のスクリプトの新しいバージョン( オリジナル )。 または別のバージョン...



リストファイルを操作するロジックは変更されていません。 スクリプトパラメータのみが変更されています。これは、拡張子のないアーカイブの名前です。スクリプトは.tar.gz



を追加し.tar.gz







新規:



快適な新しいものに加えて、不快なマイナスが現れました-スクリプトは多くの記憶を食べ始めました。



tarfileモジュールを使用して圧縮アーカイブを作成することはできませんでした。 アーカイブは作成および圧縮されますが、何らかの理由でアーカイブ内でパスが移動します。



つまり アーカイブd:\dropbox\my dropbox\backup\backup.tar.gz



を作成する必要があります。 ただし、このgzアーカイブを開くと、tarアーカイブはdropbox\my dropbox\backup\backup.tar



パスに沿って深くなります。 つまり データへのフルパスは次のとおりですd:\dropbox\my dropbox\backup\backup.tar.gz\dropbox\my dropbox\backup\backup.tar\...



原則として、あなたはそれで生きることができますが、butい...



したがって、私は別の方法で行いました-最初にすべてのファイルで圧縮せずにtarアーカイブが作成され、次に圧縮されます。 ここで、アーカイブを圧縮する機能のこの場所では、アーカイブ、つまりアーカイブ全体が転送されます。 数百MBのファイル全体がメモリに吸い込まれます。



私たちはまだこの方向を掘り下げて、より良い解決策を見つけるべきです...



Copy Source | Copy HTML



  1. インポートシステム
  2. 輸入 OS
  3. import os .path
  4. インポート tarfile
  5. 輸入時間
  6. gzipをインポートする
  7. __name__ == "__main__"の場合
  8. iflensys .argv)< 2 ):
  9. print"使用法:backup.py <出力アーカイブファイル名>"
  10. print"例:\" backup.py d:\\ dropbox \\ my dropbox \\ backup \ ""
  11. 終了( 1
  12. RootFoldersFile = "tobackup.lst"
  13. IgnoreFoldersFile = "ignore.lst"
  14. ExtraFile = "extra.lst"
  15. OutputArchive = sys .argv [ 1 ]
  16. OutputArchiveTar = OutputArchive + ".tar"
  17. OutputArchiveTarGz = OutputArchive + ".tar.gz"
  18. #必須ファイルはRootFoldersFileのみです。存在することを確認してください
  19. ifos .path.isfile(RootFoldersFile)ではない ):
  20. 印刷「%sは存在しません」 %RootFoldersFile)
  21. 終了( 1
  22. #ファイルからルートフォルダーを読み取る
  23. rootFolders = [i 開いている i.strip()(RootFoldersFile、 "r" ).readlines()]
  24. #無視する必要があるフォルダーのリストを読み取ります(指定されている場合)
  25. ignoreList = []
  26. ifos .path.isfile(IgnoreFoldersFile)):
  27. ignoreList = [i.strip()。lower() in open (IgnoreFoldersFile、 "r" ).readlines()]
  28. #古いアーカイブが存在する場合は削除する
  29. ifos .path.isfile(OutputArchiveTar)):
  30. os .unlink(OutputArchiveTar)
  31. ifos .path.isfile(OutputArchiveTarGz)):
  32. os .unlink(OutputArchiveTarGz)
  33. filesCount = 0
  34. #書き込み用に出力アーカイブを開きます(後でgzipします)
  35. 試してください
  36. tar = tarfileopen (OutputArchiveTar、 "w"
  37. IOError エラーとして 除く
  38. 印刷 (エラー)
  39. 終了( 1
  40. lastTime = time時間 ()
  41. rootFoldersのrootFolderの場合:
  42. ルート、ディレクトリ os .walk(rootFolder)のファイル:
  43. ファイル内のファイルの場合:
  44. tar.add( os .path.join(ルート、ファイル))
  45. filesCount + = 1
  46. #処理されたファイルの数を毎秒表示
  47. if (time。time()-lastTime> = 1 ):
  48. print"%d files ..." %(filesCount))
  49. lastTime = time時間 ()
  50. #無視されたフォルダーをスキップ
  51. dirのdirの場合:
  52. ifdir .lower()のignoreList またはos .path.join(root、dir).lower()のignoreList)):
  53. dirs.remove(dir)
  54. #余分なファイルリストからいくつかのファイルを追加
  55. ifos .path.isfile(ExtraFile)):
  56. [i.strip() for i for open (ExtraFile、 "r" ).readlines()]のファイル:
  57. tar.add(ファイル)
  58. tar.close()
  59. 印刷"圧縮しています..."
  60. #Gzip出力アーカイブ
  61. 試してください
  62. gz = gzip open (OutputArchiveTarGz、 "wb"
  63. IOError エラーとして 除く
  64. 印刷 (エラー)
  65. 終了( 1
  66. gz.write( open (OutputArchiveTar、 "rb" ).read())
  67. gz.close()
  68. os .unlink(OutputArchiveTar)
  69. print「出力:%s、%dファイル(s)、%dバイト」 %(OutputArchiveTarGz、filesCount、 os .path.getsize(OutputArchiveTarGz)))
  70. 印刷"完了"



All Articles