本文目录导读:

- 方案1:Linux/Mac 使用 rsync + crontab
- 方案2:使用 rclone(适合云存储提供商)
- 方案3:Python 脚本(跨平台)
- 方案4:Windows 批处理 + 任务计划程序
- 高级功能增强
我来帮你创建一个定时同步文件夹到云端的脚本,这里提供几种方案,你可以根据需求选择:
方案1:Linux/Mac 使用 rsync + crontab
安装 rsync(如果未安装)
# Ubuntu/Debian sudo apt-get install rsync # Mac brew install rsync # CentOS/RHEL sudo yum install rsync
创建同步脚本 sync_to_cloud.sh
#!/bin/bash
# ==================== 配置区 ====================
# 本地文件夹路径
LOCAL_DIR="/path/to/your/local/folder"
# 云端挂载点(如 rclone 挂载的云盘)
CLOUD_DIR="/path/to/cloud/mount"
# 日志文件路径
LOG_FILE="/var/log/sync_log.log"
# 排除的文件或目录(可选)
EXCLUDE_FILES="--exclude='*.tmp' --exclude='cache/'"
# ==================== 同步逻辑 ====================
echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始同步" >> $LOG_FILE
# 使用 rsync 进行增量同步
rsync -avz --delete $EXCLUDE_FILES \
$LOCAL_DIR/ \
$CLOUD_DIR/ \
2>> $LOG_FILE
# 检查同步是否成功
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - 同步成功" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - 同步失败" >> $LOG_FILE
fi
设置定时任务(crontab)
# 编辑 crontab crontab -e # 示例:每天凌晨2点同步 0 2 * * * /path/to/sync_to_cloud.sh # 示例:每6小时同步一次 0 */6 * * * /path/to/sync_to_cloud.sh # 示例:每30分钟同步 */30 * * * * /path/to/sync_to_cloud.sh
方案2:使用 rclone(适合云存储提供商)
安装 rclone
# Linux curl https://rclone.org/install.sh | sudo bash # Mac brew install rclone
配置 rclone
# 初始化配置 rclone config # 配置完成后测试连接 rclone ls remote:/
同步脚本 rclone_sync.sh
#!/bin/bash
# ==================== 配置区 ====================
LOCAL_DIR="/path/to/local/folder"
REMOTE_DIR="remote:cloud-backup/folder"
# ==================== 同步逻辑 ====================
# 同步到云端
rclone sync $LOCAL_DIR $REMOTE_DIR \
--progress \
--ignore-existing \
--log-file=/var/log/rclone_sync.log
# 或者使用 copy(不会删除云端多余文件)
# rclone copy $LOCAL_DIR $REMOTE_DIR --progress
方案3:Python 脚本(跨平台)
创建 auto_sync.py
#!/usr/bin/env python3
import os
import shutil
import sys
import logging
from datetime import datetime
import schedule
import time
# ==================== 配置区 ====================
LOCAL_DIR = "/path/to/local/folder"
CLOUD_DIR = "/path/to/cloud/folder"
logging.basicConfig(
filename='sync.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def sync_folders():
"""同步文件夹到云端"""
try:
logging.info(f"开始同步: {LOCAL_DIR} -> {CLOUD_DIR}")
# 确保目标目录存在
os.makedirs(CLOUD_DIR, exist_ok=True)
# 遍历本地文件
for root, dirs, files in os.walk(LOCAL_DIR):
relative_path = os.path.relpath(root, LOCAL_DIR)
target_dir = os.path.join(CLOUD_DIR, relative_path)
# 创建对应目录
os.makedirs(target_dir, exist_ok=True)
# 复制文件
for file in files:
source_file = os.path.join(root, file)
target_file = os.path.join(target_dir, file)
# 只在文件不存在或大小不同时复制
if os.path.exists(target_file):
if os.path.getsize(source_file) != os.path.getsize(target_file):
shutil.copy2(source_file, target_file)
logging.info(f"更新文件: {source_file}")
else:
shutil.copy2(source_file, target_file)
logging.info(f"新文件: {source_file}")
logging.info("同步完成")
except Exception as e:
logging.error(f"同步失败: {str(e)}")
# ==================== 定时任务设置 ====================
def main():
# 立即执行一次
sync_folders()
# 每天执行(可选多种时间方案)
schedule.every().day.at("02:00").do(sync_folders) # 每天凌晨2点
schedule.every().hour.do(sync_folders) # 每小时
schedule.every(30).minutes.do(sync_folders) # 每30分钟
logging.info("定时同步脚本已启动")
# 持续运行
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
main()
方案4:Windows 批处理 + 任务计划程序
创建 sync_windows.bat
@echo off
echo ==============================
echo 文件夹同步脚本
echo ==============================
set LOCAL_DIR=C:\path\to\local\folder
set CLOUD_DIR=D:\cloud\folder
set LOG_FILE=C:\sync_log.txt
echo %date% %time% - 开始同步 >> %LOG_FILE%
:: 使用 robocopy 进行同步
robocopy "%LOCAL_DIR%" "%CLOUD_DIR%" /MIR /R:2 /W:2 /LOG:%LOG_FILE%
if %ERRORLEVEL% LEQ 7 (
echo %date% %time% - 同步成功 >> %LOG_FILE%
) else (
echo %date% %time% - 同步失败 >> %LOG_FILE%
)
设置 Windows 任务计划程序
# 创建计划任务(管理员权限) schtasks /create /tn "云盘同步" /tr "C:\path\to\sync_windows.bat" /sc daily /st 02:00
高级功能增强
带备份的同步
#!/bin/bash
# 在同步前先备份旧版本
BACKUP_DIR="/path/to/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
rsync -avb --delete --backup-dir=$BACKUP_DIR \
$LOCAL_DIR/ $CLOUD_DIR/
条件同步(文件变更才会触发)
import hashlib
def file_changed(source, target):
if not os.path.exists(target):
return True
# 比较文件大小
if os.path.getsize(source) != os.path.getsize(target):
return True
# 比较 MD5 哈希
hash1 = hashlib.md5(open(source, 'rb').read()).hexdigest()
hash2 = hashlib.md5(open(target, 'rb').read()).hexdigest()
return hash1 != hash2
邮件通知同步结果
import smtplib
from email.mime.text import MIMEText
def send_notification(subject, body):
# 邮件配置
sender = 'your_email@example.com'
recipient = 'admin@example.com'
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = recipient
# 发送邮件
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login(sender, 'password')
server.send_message(msg)
-
选择合适的方案:
- Linux/Mac:推荐方案1或2
- Windows:推荐方案4
- 跨平台:方案3
-
修改配置:
- 将
LOCAL_DIR和CLOUD_DIR改为实际路径 - 根据需要调整同步频率
- 将
-
设置定时任务:
- Linux/Mac:crontab
- Windows:任务计划程序
- 跨平台:Python schedule
-
运行脚本:
# 赋予执行权限 chmod +x sync_to_cloud.sh # 手动测试 ./sync_to_cloud.sh
选择最适合你需求的方案,如果需要更多自定义功能,请告诉我具体需求!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播