功能说明:
这个 Python 程序是一个自动化文件同步工具,能够将一个源文件夹的文件实时同步到目标文件夹,保持两个文件夹中的文件一致。它支持递归复制子文件夹,并且能够自动检测文件的变化(如文件的新增、修改或删除),并做出相应的同步操作。该工具适用于需要保持文件夹之间数据一致性的场景,例如备份文件夹、开发环境同步等。
程序功能的亮点包括:
- 实时监控源文件夹的变化。
- 自动将源文件夹的变化同步到目标文件夹。
- 支持递归文件夹结构。
- 支持文件的增量同步(仅同步新增或修改的文件)。
- 支持文件删除同步(如果源文件夹删除了某个文件,目标文件夹中的相应文件也会被删除)。
- 支持日志记录同步过程。
- 提供配置选项,允许用户自定义同步间隔、文件夹路径等。
代码:
import os
import shutil
import time
import logging
from filecmp import dircmp
# 配置日志
logging.basicConfig(filename='sync.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
# 配置常量
SOURCE_DIR = "source" # 需要同步的源文件夹路径
TARGET_DIR = "target" # 目标文件夹路径
SYNC_INTERVAL = 10 # 同步间隔,单位为秒,默认为10秒
# 获取当前时间,用于创建日志条目
def get_current_time():
return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
# 判断两个文件夹的内容是否相同
def compare_directories(source, target):
# 使用 dircmp 对比源文件夹和目标文件夹
dcmp = dircmp(source, target)
return dcmp.left_only, dcmp.right_only, dcmp.diff_files
# 同步文件夹内容
def sync_folders(source, target):
# 比较源文件夹和目标文件夹
left_only, right_only, diff_files = compare_directories(source, target)
# 同步新增或修改的文件
for file in left_only + diff_files:
source_file = os.path.join(source, file)
target_file = os.path.join(target, file)
if os.path.isdir(source_file):
# 如果是目录,则递归调用
if not os.path.exists(target_file):
os.makedirs(target_file)
logging.info(f"{get_current_time()} - 创建目录: {target_file}")
sync_folders(source_file, target_file)
else:
# 如果是文件,则复制文件
shutil.copy2(source_file, target_file)
logging.info(f"{get_current_time()} - 同步文件: {source_file} 到 {target_file}")
# 同步目标文件夹中已删除的文件
for file in right_only:
target_file = os.path.join(target, file)
if os.path.isdir(target_file):
shutil.rmtree(target_file)
logging.info(f"{get_current_time()} - 删除目录: {target_file}")
else:
os.remove(target_file)
logging.info(f"{get_current_time()} - 删除文件: {target_file}")
# 执行同步操作
def perform_sync():
if not os.path.exists(SOURCE_DIR):
logging.error(f"{get_current_time()} - 错误: 源文件夹 {SOURCE_DIR} 不存在!")
return
if not os.path.exists(TARGET_DIR):
os.makedirs(TARGET_DIR)
logging.info(f"{get_current_time()} - 创建目标文件夹: {TARGET_DIR}")
# 开始同步
sync_folders(SOURCE_DIR, TARGET_DIR)
# 定时同步
def scheduled_sync():
logging.info(f"{get_current_time()} - 自动同步程序启动...")
while True:
perform_sync() # 执行同步
logging.info(f"{get_current_time()} - 等待 {SYNC_INTERVAL} 秒后进行下一次同步...")
time.sleep(SYNC_INTERVAL) # 等待指定的时间间隔后再进行下一次同步
# 主程序
def main():
scheduled_sync()
# 执行主程序
if __name__ == "__main__":
main()
使用说明:
安装要求:
- Python 3.x 环境。
- 程序使用了 Python 内置的
os
、shutil
、time
、logging
和filecmp
模块,无需安装额外的第三方库。
程序运行:
- 将代码保存为
auto_sync.py
。 在终端(命令行)中运行该程序:
python auto_sync.py
- 将代码保存为
配置项说明:
- SOURCE_DIR:需要同步的源文件夹路径。例如
source
目录。 - TARGET_DIR:目标文件夹路径,所有源文件夹中的变化都会同步到此目录。
- SYNC_INTERVAL:指定同步的时间间隔,单位为秒。默认值为 10 秒,即每 10 秒同步一次。您可以根据需要调整此值。
- SOURCE_DIR:需要同步的源文件夹路径。例如
运行效果:
- 程序会定期监控
SOURCE_DIR
目录中的文件变化,并将其同步到TARGET_DIR
。每次检测到源文件夹有新增、修改或删除的文件,程序会自动执行同步操作。 - 文件的增量同步:仅会同步新增或修改过的文件。
- 删除同步:如果源文件夹中删除了某个文件或文件夹,目标文件夹中的相应文件也会被删除。
- 程序会记录所有同步操作的日志,日志文件保存在
sync.log
中。
- 程序会定期监控
日志文件:
程序会将每次同步的结果记录在
sync.log
文件中,包括文件和文件夹的同步、删除操作。日志格式如下:2025-04-15 13:30:00 - 同步文件: source/file1.txt 到 target/file1.txt 2025-04-15 13:30:10 - 删除文件: target/file2.txt 2025-04-15 13:30:20 - 创建目录: target/new_directory
如何停止程序:
- 如果您希望停止同步操作,可以通过终端中的
Ctrl + C
来中断程序执行。
- 如果您希望停止同步操作,可以通过终端中的
同步过程解释:
- 程序通过
filecmp.dircmp
比较源文件夹和目标文件夹的内容,找出差异。 - 任何新增或修改的文件将被同步到目标文件夹。
- 任何在源文件夹中被删除的文件或文件夹将在目标文件夹中被删除。
- 程序会定期检查源文件夹,并在有变化时自动执行同步操作。
- 程序通过
扩展功能:
- 增量同步:目前程序仅支持基于时间差异的同步,后续可以扩展为仅同步被修改过的文件,进一步减少同步的文件数量。
- 同步过滤:可以根据文件类型(例如
.txt
或.jpg
)来过滤不需要同步的文件。 - 邮件通知:在同步操作完成后,可以发送邮件通知用户同步的状态。
小结:
这个自动化文件同步工具使用 Python 编写,能够帮助用户保持两个文件夹的内容一致。它可以实时监控源文件夹的变化,并将增量变化同步到目标文件夹中。程序还支持删除文件同步,确保源和目标文件夹中的文件完全一致。通过日志记录和自定义配置,用户可以方便地进行文件夹同步,并跟踪同步过程中的所有操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。