def sync_gridsome() -> None: """ 指定のローカルとリモートディレクトリを同期する """ cfg = configparser.ConfigParser() cfg.read("config.ini") # ローカルとリモートの設定 local = FsTarget(cfg["PATH"]["LOCAL"]) user = cfg["FTPS"]["USER"] passwd = cfg["FTPS"]["PASSWORD"] remote = FtpTarget( cfg["PATH"]["REMOTE"], # リモートディレクトリパス cfg["FTPS"]["SERVER"], # FTPサーバ username=user, password=passwd, tls=True, # FTPS有効 ) # オプション設定 # ローカル優先/--deleteオプション有効/指定ディレクトリは同期除外 # opts = {"resolve": "local", "delete": True, "force": True} opts = {"resolve": "local"} # 同期の実行 sync = BiDirSynchronizer(local, remote, opts) sync.run()
def do_sync(): from ftpsync.synchronizers import BiDirSynchronizer from ftpsync.targets import make_target local_target = make_target("~/test_pyftpsync_dl") # local_target = make_target("c:/tmp/test_pyftpsync") remote_target = make_target("ftp://wwwendt.de/test_pyftpsync", {"ftp_debug": False}) opts = {"verbose": 6, "dry_run": False, "resolve": "local"} s = BiDirSynchronizer(local_target, remote_target, opts) s.run()
def _sync_test_folders(options): """Run bi-dir sync with fresh objects.""" local = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "local")) remote = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "remote")) opts = {"dry_run": False, "verbose": 3} if options: opts.update(options) s = BiDirSynchronizer(local, remote, opts) s.run() return s.get_stats()
def synchronize(user, password): print "syncing..." try: local = FsTarget(DEPLOY_FOLDER) remote = FtpTarget(FTP_TARGET, FTP_HOST, user, password, tls=True) opts = {"resolve": "skip", "verbose": 1, "dry_run": False} s = BiDirSynchronizer(local, remote, opts) s.run() print "sync complete..." except Exception as e: print type(e) print e.args print e
def synchronize(user, password): print "syncing..." try: local = FsTarget(DEPLOY_FOLDER) remote = FtpTarget(FTP_TARGET, FTP_HOST, user, password, tls=True) opts = {"resolve": "skip", "verbose": 1, "dry_run" : False} s = BiDirSynchronizer(local, remote, opts) s.run() print "sync complete..." except Exception as e: print type(e) print e.args print e
def test_sync_conflicts(self): local = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "local")) remote = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "remote")) opts = { "dry_run": False, "verbose": self.verbose } # , "resolve": "ask"} # Copy local -> remote s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() self.assertEqual(stats["files_written"], 6) self.assertEqual(stats["dirs_created"], 2) # Modify local and remote # conflict 1: local is newer dt = datetime.datetime.utcnow() touch_test_file("local/file1.txt", dt) dt = datetime.datetime.utcnow() - datetime.timedelta(seconds=10) touch_test_file("remote/file1.txt", dt=dt) # path = os.path.join(PYFTPSYNC_TEST_FOLDER, "remote/file1.txt") # stamp = time.time() - 10 # os.utime(path, (stamp, stamp)) # conflict 2: remote is newer touch_test_file("remote/file2.txt") dt = datetime.datetime.utcnow() - datetime.timedelta(seconds=10) touch_test_file("local/file2.txt", dt=dt) s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["entries_seen"], 18) self.assertEqual(stats["entries_touched"], 0) self.assertEqual(stats["bytes_written"], 0) self.assertEqual(stats["conflict_files"], 2)
def test_sync_fs_fs(self): local = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "local")) remote = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "remote")) opts = {"dry_run": False, "verbose": 3} s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["local_dirs"], 2) self.assertEqual( stats["local_files"], 4) # currently files are not counted, when inside a *new* folder self.assertEqual(stats["remote_dirs"], 0) self.assertEqual(stats["remote_files"], 0) self.assertEqual(stats["files_written"], 6) self.assertEqual(stats["dirs_created"], 2) self.assertEqual(stats["bytes_written"], 16403) # file times are preserved self.assertEqual(_get_test_file_date("local/file1.txt"), STAMP_20140101_120000) self.assertEqual(_get_test_file_date("remote/file1.txt"), STAMP_20140101_120000) # Again: nothing to do s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["local_dirs"], 2) self.assertEqual(stats["local_files"], 6) self.assertEqual(stats["remote_dirs"], 2) self.assertEqual(stats["remote_files"], 6) self.assertEqual(stats["files_created"], 0) self.assertEqual(stats["files_deleted"], 0) self.assertEqual(stats["files_written"], 0) self.assertEqual(stats["dirs_created"], 0) self.assertEqual(stats["bytes_written"], 0) # Modify remote and/or remote _touch_test_file("local/file1.txt") _touch_test_file("remote/file2.txt") # file3.txt will cause a conflict: _touch_test_file("local/file3.txt") dt = datetime.datetime.now() - datetime.timedelta(seconds=10) _touch_test_file("remote/file3.txt", dt=dt) s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["entries_seen"], 18) self.assertEqual(stats["entries_touched"], 2) self.assertEqual(stats["files_created"], 0) self.assertEqual(stats["files_deleted"], 0) self.assertEqual(stats["files_written"], 2) self.assertEqual(stats["dirs_created"], 0) self.assertEqual(stats["download_files_written"], 1) self.assertEqual(stats["upload_files_written"], 1) self.assertEqual(stats["conflict_files"], 1) self.assertEqual(stats["bytes_written"], 6)
def test_sync_conflicts(self): local = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "local")) remote = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "remote")) opts = {"dry_run": False, "verbose": 3} # Copy local -> remote s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() self.assertEqual(stats["files_written"], 6) self.assertEqual(stats["dirs_created"], 2) # Modify local and remote # conflict 1: local is newer dt = datetime.datetime.now() _touch_test_file("local/file1.txt", dt) dt = datetime.datetime.now() - datetime.timedelta(seconds=10) _touch_test_file("remote/file1.txt", dt=dt) # path = os.path.join(PYFTPSYNC_TEST_FOLDER, "remote/file1.txt") # stamp = time.time() - 10 # os.utime(path, (stamp, stamp)) # conflict 2: remote is newer _touch_test_file("remote/file2.txt") dt = datetime.datetime.now() - datetime.timedelta(seconds=10) _touch_test_file("local/file2.txt", dt=dt) s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["entries_seen"], 18) self.assertEqual(stats["entries_touched"], 0) self.assertEqual(stats["bytes_written"], 0) self.assertEqual(stats["conflict_files"], 2)
def test_sync_fs_fs(self): local = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "local")) remote = FsTarget(os.path.join(PYFTPSYNC_TEST_FOLDER, "remote")) opts = {"dry_run": False, "verbose": self.verbose} # , "resolve": "ask"} s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["local_dirs"], 2) # currently files are not counted, when inside a *new* folder: self.assertEqual(stats["local_files"], 4) self.assertEqual(stats["remote_dirs"], 0) self.assertEqual(stats["remote_files"], 0) self.assertEqual(stats["files_written"], 6) self.assertEqual(stats["dirs_created"], 2) self.assertEqual(stats["bytes_written"], 16403) # file times are preserved self.assertEqual(get_test_file_date("local/file1.txt"), STAMP_20140101_120000) self.assertEqual(get_test_file_date("remote/file1.txt"), STAMP_20140101_120000) # Again: nothing to do s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["local_dirs"], 2) self.assertEqual(stats["local_files"], 6) self.assertEqual(stats["remote_dirs"], 2) self.assertEqual(stats["remote_files"], 6) self.assertEqual(stats["files_created"], 0) self.assertEqual(stats["files_deleted"], 0) self.assertEqual(stats["files_written"], 0) self.assertEqual(stats["dirs_created"], 0) self.assertEqual(stats["bytes_written"], 0) # Modify remote and/or remote touch_test_file("local/file1.txt") touch_test_file("remote/file2.txt") # file3.txt will cause a conflict: touch_test_file("local/file3.txt") dt = datetime.datetime.utcnow() - datetime.timedelta(seconds=10) touch_test_file("remote/file3.txt", dt=dt) s = BiDirSynchronizer(local, remote, opts) s.run() stats = s.get_stats() # pprint(stats) self.assertEqual(stats["entries_seen"], 18) self.assertEqual(stats["entries_touched"], 2) self.assertEqual(stats["files_created"], 0) self.assertEqual(stats["files_deleted"], 0) self.assertEqual(stats["files_written"], 2) self.assertEqual(stats["dirs_created"], 0) self.assertEqual(stats["download_files_written"], 1) self.assertEqual(stats["upload_files_written"], 1) self.assertEqual(stats["conflict_files"], 1) self.assertEqual(stats["bytes_written"], 6)
# #загружаем недостающие файлы на ftp # for local_file in local_files - remote_files: # server.storbinary('STOR ' + local_file, open(local_file, 'rb')) # # #закрываем соединение с сервером # server.close() from ftpsync.targets import FsTarget from ftpsync.ftp_target import FtpTarget from ftpsync.synchronizers import BiDirSynchronizer local = FsTarget("/home/garbage/backup/") user ="******" passwd = "buuserpwd" remote = FtpTarget("1C8", "192.168.0.26", user, passwd, tls=True) opts = {"resolve": "skip", "verbose": 1, "dry_run" : False} s = BiDirSynchronizer(local, remote, opts) s.run()