Rclone 常用参数详解与示例

基础操作参数

1. 基本命令格式

bash
# 基本语法:rclone [options] command [source:]path [dest:]path [flags]

# 示例 1: 列出远程存储内容
rclone ls remote:bucket/path
# 参数说明:
#   ls - 列出文件(包含大小)
#   lsl - 列出文件(包含修改时间)
#   lsd - 只列出目录
#   lsf - 简单列表(适合脚本处理)

# 示例 2: 查看目录结构
rclone tree remote:bucket --depth 3 --full-path
# 输出:
# bucket/
# └── path/
#     ├── folder1/
#     │   ├── file1.txt (10 MB)
#     │   └── file2.jpg (5 MB)
#     └── folder2/
#         └── file3.pdf (2 MB)

# 示例 3: 查看文件/目录大小
rclone size remote:bucket --json
# 输出:
# {
#   "count": 1250,
#   "bytes": 53687091200,
#   "sizes": { ... }
# }

2. 常用操作命令

bash
# 复制文件/目录
rclone copy source:path dest:path [flags]
# 示例:
rclone copy sds3:mybucket/data/ hws3:backup/data/ --progress

# 同步目录(使目标与源一致)
rclone sync source:path dest:path [flags]
# 注意:sync 会删除目标端多余的文件!

# 移动文件(复制后删除源)
rclone move source:path dest:path [flags]

# 删除文件
rclone delete remote:path
rclone purge remote:path  # 删除目录及其所有内容

# 创建目录
rclone mkdir remote:path
rclone mkdir remote:bucket/newfolder

# 检查文件是否存在
rclone check source:path dest:path
rclone check sds3:bucket hws3:bucket --size-only

性能优化参数

1. 传输并发控制

bash
# 设置同时传输的文件数
rclone copy source: dest: --transfers 16
# 推荐值:
#   - 小文件(100KB-1MB): 16-32
#   - 中文件(1-100MB): 8-16  
#   - 大文件(100MB+): 4-8

# 设置检查线程数(用于统计、比较等)
rclone copy source: dest: --checkers 32
# checkers 通常可以设高一些,如32-64

# 控制缓冲区大小
rclone copy source: dest: --buffer-size 64M
rclone copy source: dest: --multi-thread-cutoff 64M
rclone copy source: dest: --multi-thread-streams 4
# 对于大文件传输,多线程可以显著提高速度

2. 带宽与限速控制

bash
# 限制带宽使用
rclone copy source: dest: --bwlimit "08:00,1M 12:00,10M 23:00,off"
# 格式解释:
#   08:00,1M   - 8点到12点限制1MB/s
#   12:00,10M  - 12点到23点限制10MB/s  
#   23:00,off  - 23点到8点不限制

# 简单带宽限制
rclone copy source: dest: --bwlimit 10M    # 限制10MB/s
rclone copy source: dest: --bwlimit 500k   # 限制500KB/s

# 自适应带宽限制
rclone copy source: dest: --bwlimit 0.5M   # 限制0.5MB/s
rclone copy source: dest: --bwlimit 10%    # 限制可用带宽的10%

3. 内存与缓存优化

bash
# 控制分块大小
rclone copy source: dest: --s3-chunk-size 64M
rclone copy source: dest: --s3-upload-cutoff 64M
# 对于大文件优化:
#   - chunk-size: 16-256M
#   - upload-cutoff: 16-256M

# 内存缓存设置
rclone copy source: dest: --cache-chunk-size 10M
rclone copy source: dest: --cache-chunk-total-size 1G
# 适用于需要频繁访问的文件

# 限制内存使用
rclone copy source: dest: --max-backlog 10000
rclone copy source: dest: --max-depth 10

过滤与排除参数

1. 文件过滤规则

bash
# 排除特定文件类型
rclone copy source: dest: \
  --exclude "*.tmp" \
  --exclude "*.log" \
  --exclude "*.swp"

# 包含特定文件类型
rclone copy source: dest: \
  --include "*.jpg" \
  --include "*.png" \
  --exclude "*"

# 按大小过滤
rclone copy source: dest: \
  --min-size 1M \     # 最小1MB
  --max-size 100M     # 最大100MB

# 按时间过滤
rclone copy source: dest: \
  --min-age 7d \      # 7天前的文件
  --max-age 30d \     # 30天内的文件
  --max-age 3h \      # 3小时内的文件
  --min-age 1h30m     # 1小时30分钟前的文件

2. 复杂过滤模式

bash
# 使用过滤文件
rclone copy source: dest: --filter-from filter-rules.txt
# filter-rules.txt 内容示例:
# - *.jpg
# + 2024-*/**
# - /exclude-this-folder/**
# + /include-this-folder/**

# 正则表达式过滤
rclone copy source: dest: \
  --exclude-regex ".*\.(tmp|log|swp)$" \
  --include-regex "^2024-.*\.(jpg|png)$"

# 排除空目录
rclone copy source: dest: --create-empty-src-dirs=false

# 排除符号链接
rclone copy source: dest: --copy-links=false

日志与调试参数

1. 进度显示参数

bash
# 显示详细进度
rclone copy source: dest: --progress
# 输出:
# Transferred:   2.351 GiB / 50.000 GiB, 5%, 15.123 MiB/s, ETA 53m12s
# Checks:              1250 / 1250, 100%
# Transferred:          850 / 1250, 68%
# Elapsed time:     2m30.4s

# 单行进度显示
rclone copy source: dest: --stats-one-line
# 输出:
# 2024/01/15 14:30:15 INFO  : ...progress:  27% done, 12.345 MB/s, 1h23m45s remaining

# 自定义统计间隔
rclone copy source: dest: --stats 30s     # 每30秒显示统计
rclone copy source: dest: --stats 1m      # 每1分钟显示统计
rclone copy source: dest: --stats 0       # 禁用统计显示

# 显示传输速率
rclone copy source: dest: --stats-file-name-length 50
rclone copy source: dest: --stats-unit bits    # 以比特为单位显示

2. 日志记录参数

bash
# 记录到日志文件
rclone copy source: dest: \
  --log-file=rclone.log \
  --log-level INFO \
  --use-json-log

# 日志级别选项:
#   DEBUG, INFO, NOTICE, ERROR
rclone copy source: dest: --log-level DEBUG  # 最详细
rclone copy source: dest: --log-level INFO   # 默认级别
rclone copy source: dest: --log-level ERROR  # 只记录错误

# JSON格式日志
rclone copy source: dest: --use-json-log
# 输出示例:
# {"level":"info","msg":"file.txt: Copied (new)","source":"...","time":"2024-01-15T14:30:15Z"}

# 详细调试输出
rclone copy source: dest: --dump flags
rclone copy source: dest: --dump bodies    # 输出HTTP请求/响应体(谨慎使用)
rclone copy source: dest: --dump headers   # 输出HTTP头部
rclone copy source: dest: --dump auth      # 输出认证信息

网络与连接参数

1. 超时与重试设置

bash
# 连接超时设置
rclone copy source: dest: \
  --timeout 5m \          # 全局超时5分钟
  --contimeout 30s \      # 连接超时30秒
  --timeout 2h            # 总超时2小时

# 重试策略
rclone copy source: dest: \
  --retries 5 \           # 最大重试次数
  --retries-sleep 10s \   # 重试间隔
  --low-level-retries 10  # 低级重试(单个请求)

# 限速重试
rclone copy source: dest: \
  --retries 10 \
  --retries-sleep 1s \
  --multi-thread-retries 3

2. 代理与网络配置

bash
# 使用代理服务器
rclone copy source: dest: \
  --proxy http://proxy.example.com:8080 \
  --proxy-auth username:password

# SOCKS5代理
rclone copy source: dest: \
  --socks5 socks5://user:pass@host:1080

# 绑定特定IP
rclone copy source: dest: --bind 192.168.1.100

# 设置DNS服务器
rclone copy source: dest: --dns-servers "8.8.8.8,1.1.1.1"

# 禁用TLS验证(仅测试用)
rclone copy source: dest: --no-check-certificate

3. HTTP参数调整

bash
# HTTP客户端设置
rclone copy source: dest: \
  --user-agent "rclone/1.63" \
  --header "X-Custom-Header: value" \
  --header-upload "Content-Type: application/octet-stream"

# 连接池设置
rclone copy source: dest: \
  --expect-continue-timeout 2s \
  --disable-http-keep-alives \
  --max-upload-parts 10000

# 上传下载参数
rclone copy source: dest: \
  --s3-upload-concurrency 4 \
  --s3-no-head-object

同步与比较参数

1. 验证与检查

bash
# 检查文件一致性
rclone check source: dest: --size-only
rclone check source: dest: --md5sum
rclone check source: dest: --sha1sum
# 区别:
#   --size-only: 只比较大小
#   --md5sum: 比较MD5(需要源支持)
#   --sha1sum: 比较SHA1(需要源支持)

# 列出差异
rclone check source: dest: --differ --missing-on-dest --missing-on-source
# 输出示例:
# 2024/01/15 14:30:15 NOTICE: file1.txt: differ
# 2024/01/15 14:30:15 NOTICE: file2.txt: missing on dest

# 生成校验和文件
rclone md5sum remote:path --output-file checksums.md5
rclone sha1sum remote:path --base64

2. 同步模式控制

bash
# 安全同步(不删除文件)
rclone sync source: dest: --dry-run  # 模拟运行,不实际操作
rclone sync source: dest: --interactive  # 交互式确认

# 强制同步
rclone sync source: dest: --delete-during  # 边复制边删除
rclone sync source: dest: --delete-after   # 复制完成后删除(默认)
rclone sync source: dest: --delete-before  # 先删除再复制

# 备份模式同步
rclone sync source: dest: \
  --backup-dir dest:backup/$(date +%Y%m%d) \
  --suffix .$(date +%Y%m%d%H%M%S)
# 效果:
#   1. 被覆盖的文件会移动到 backup-dir
#   2. 重名文件会添加后缀

实用脚本示例

1. 批量迁移脚本模板

bash
#!/bin/bash
# migration_template.sh - Rclone 批量迁移模板

set -e  # 遇到错误立即退出

# 配置参数
SOURCE_REMOTE="sds3"
DEST_REMOTE="hws3"
LOG_DIR="./logs"
BACKUP_DIR="./backup"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建目录
mkdir -p "$LOG_DIR" "$BACKUP_DIR"

# 通用参数
COMMON_PARAMS="
  --transfers 16
  --checkers 32
  --stats 30s
  --progress
  --retries 5
  --retries-sleep 10s
  --timeout 1h
  --log-level INFO
  --log-file $LOG_DIR/migration_${DATE}.log
"

# 排除规则
EXCLUDE_PARAMS="
  --exclude *.tmp
  --exclude *.log
  --exclude .DS_Store
  --exclude Thumbs.db
  --exclude ._*
  --exclude .~*
"

# 执行迁移函数
migrate_bucket() {
    local source_bucket=$1
    local dest_bucket=$2
    local description=$3
    
    echo "开始迁移: $description"
    echo "源: $SOURCE_REMOTE:$source_bucket"
    echo "目标: $DEST_REMOTE:$dest_bucket"
    
    # 首先进行dry-run检查
    echo "正在检查差异..."
    rclone check "$SOURCE_REMOTE:$source_bucket" "$DEST_REMOTE:$dest_bucket" \
        --size-only \
        --one-way \
        --differ \
        --missing-on-dest \
        --combined "$LOG_DIR/diff_${DATE}.log"
    
    # 确认是否继续
    read -p "是否继续执行迁移?(y/n): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "迁移已取消"
        exit 1
    fi
    
    # 执行迁移
    echo "开始执行迁移..."
    rclone copy "$SOURCE_REMOTE:$source_bucket" "$DEST_REMOTE:$dest_bucket" \
        $COMMON_PARAMS \
        $EXCLUDE_PARAMS \
        --backup-dir "$DEST_REMOTE:backup/${DATE}" \
        --suffix ".bak_${DATE}"
    
    # 验证迁移结果
    echo "验证迁移结果..."
    rclone check "$SOURCE_REMOTE:$source_bucket" "$DEST_REMOTE:$dest_bucket" \
        --size-only \
        --one-way \
        --differ \
        --missing-on-dest \
        --combined "$LOG_DIR/verify_${DATE}.log"
    
    echo "迁移完成: $description"
}

# 使用示例
migrate_bucket "source-bucket" "dest-bucket" "生产数据迁移"

2. 监控与报告脚本

bash
#!/bin/bash
# monitor_and_report.sh - 迁移监控与报告

# 参数配置
SOURCE="sds3:bucket"
DEST="hws3:bucket"
REPORT_FILE="migration_report_$(date +%Y%m%d).html"

# 生成HTML报告
generate_html_report() {
    cat > "$REPORT_FILE" << EOF
<!DOCTYPE html>
<html>
<head>
    <title>Rclone 迁移报告</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .header { background: #f0f0f0; padding: 20px; border-radius: 5px; }
        .stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin: 20px 0; }
        .stat-card { border: 1px solid #ddd; padding: 15px; border-radius: 5px; }
        .success { color: green; }
        .warning { color: orange; }
        .error { color: red; }
        table { width: 100%; border-collapse: collapse; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <div class="header">
        <h1>Rclone 迁移报告</h1>
        <p>生成时间: $(date)</p>
    </div>
EOF

    # 获取统计信息
    local source_stats=$(rclone size "$SOURCE" --json 2>/dev/null || echo '{}')
    local dest_stats=$(rclone size "$DEST" --json 2>/dev/null || echo '{}')
    
    cat >> "$REPORT_FILE" << EOF
    <div class="stats">
        <div class="stat-card">
            <h3>源端统计</h3>
            <p>文件数: $(echo "$source_stats" | jq -r '.count // 0')</p>
            <p>总大小: $(echo "$source_stats" | jq -r '.bytes // 0 | . / 1024/1024/1024 | round') GB</p>
        </div>
        <div class="stat-card">
            <h3>目标端统计</h3>
            <p>文件数: $(echo "$dest_stats" | jq -r '.count // 0')</p>
            <p>总大小: $(echo "$dest_stats" | jq -r '.bytes // 0 | . / 1024/1024/1024 | round') GB</p>
        </div>
    </div>
EOF

    # 检查差异
    echo "<h3>文件差异检查</h3>" >> "$REPORT_FILE"
    echo "<table>" >> "$REPORT_FILE"
    echo "<tr><th>状态</th><th>文件路径</th><th>大小</th></tr>" >> "$REPORT_FILE"
    
    # 使用rclone check获取差异
    rclone check "$SOURCE" "$DEST" --size-only --combined /tmp/diff.log 2>/dev/null
    while IFS= read -r line; do
        if [[ "$line" == *"differ"* ]]; then
            echo "<tr class='warning'><td>差异</td><td>${line#* }</td><td>-</td></tr>" >> "$REPORT_FILE"
        elif [[ "$line" == *"missing on dest"* ]]; then
            echo "<tr class='error'><td>缺失</td><td>${line#* }</td><td>-</td></tr>" >> "$REPORT_FILE"
        fi
    done < /tmp/diff.log
    
    echo "</table>" >> "$REPORT_FILE"
    echo "</body></html>" >> "$REPORT_FILE"
    
    echo "报告已生成: $REPORT_FILE"
}

# 执行监控循环
monitor_loop() {
    while true; do
        clear
        echo "=== Rclone 迁移监控 ==="
        echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
        echo ""
        
        # 显示源端统计
        echo "源端 ($SOURCE):"
        rclone size "$SOURCE" --human-readable 2>/dev/null || echo "无法访问"
        echo ""
        
        # 显示目标端统计
        echo "目标端 ($DEST):"
        rclone size "$DEST" --human-readable 2>/dev/null || echo "无法访问"
        echo ""
        
        # 显示传输进度(如果有进行中的传输)
        echo "最近活动:"
        tail -5 logs/*.log 2>/dev/null | grep -E "(Transferred|Checks|Elapsed)" || echo "无活动记录"
        echo ""
        
        echo "按 Ctrl+C 退出监控"
        sleep 10
    done
}

# 主菜单
case "$1" in
    "report")
        generate_html_report
        ;;
    "monitor")
        monitor_loop
        ;;
    *)
        echo "用法: $0 {report|monitor}"
        exit 1
        ;;
esac

3. 常用快捷命令集合

bash
#!/bin/bash
# rclone_cheatsheet.sh - 常用命令速查

# 1. 快速查看存储使用情况
alias rclone-du='rclone size remote:bucket --human-readable'

# 2. 查找大文件
alias rclone-find-large='rclone lsf remote:bucket -R --files-only --format "tp" | sort -k2 -nr | head -20'

# 3. 快速比较两个目录
alias rclone-quick-diff='rclone check source: dest: --size-only --one-way --missing-on-dest --quiet'

# 4. 批量重试失败的传输
alias rclone-retry='rclone copy source: dest: --retries 10 --retries-sleep 30s --low-level-retries 20'

# 5. 生成迁移报告
alias rclone-report='rclone size source: dest: --json --human-readable | jq'

# 6. 清理空目录
alias rclone-cleanup='rclone rmdirs remote:bucket'

# 7. 快速测试传输速度
alias rclone-speedtest='time rclone copy source:testfile dest: --progress --stats 5s'

# 8. 备份配置
alias rclone-backup-config='cp ~/.config/rclone/rclone.conf ~/.config/rclone/rclone.conf.backup.$(date +%Y%m%d)'

# 实用函数
rclone_progress() {
    # 监控特定传输的进度
    watch -n 10 "rclone size $1 --human-readable"
}

rclone_stream_log() {
    # 实时查看日志
    tail -f "$1" | grep -E "(Transferred|ERROR|WARN|INFO)"
}

rclone_summary() {
    # 显示迁移摘要
    echo "=== 迁移摘要 ==="
    echo "开始时间: $(grep -h "started" logs/*.log | tail -1)"
    echo "当前状态:"
    rclone size "$1" "$2" --human-readable --json | jq -r '
        "源端: \(.[0].bytes/1024/1024/1024 | round) GB (\(.[0].count) 文件)",
        "目标端: \(.[1].bytes/1024/1024/1024 | round) GB (\(.[1].count) 文件)"
    '
}

参数速查表

性能优化速查

bash
# 小文件优化(<1MB)
rclone copy source: dest: \
  --transfers 32 \
  --checkers 64 \
  --fast-list \
  --buffer-size 16M

# 大文件优化(>100MB)
rclone copy source: dest: \
  --transfers 4 \
  --checkers 8 \
  --s3-chunk-size 128M \
  --multi-thread-streams 4 \
  --multi-thread-cutoff 128M

# 高延迟网络优化
rclone copy source: dest: \
  --timeout 10m \
  --contimeout 2m \
  --retries 10 \
  --low-level-retries 20 \
  --retries-sleep 30s

常用组合示例

bash
# 示例1:安全的初始同步(带备份)
rclone sync source: dest: \
  --progress \
  --stats 30s \
  --backup-dir dest:backup/$(date +%Y%m%d) \
  --suffix .$(date +%Y%m%d%H%M%S) \
  --dry-run  # 首次运行先检查

# 示例2:生产环境迁移
rclone copy source: dest: \
  --transfers 8 \
  --checkers 16 \
  --bwlimit "09:00,2M 18:00,10M 23:00,off" \
  --log-file migration.log \
  --log-level INFO \
  --stats-one-line \
  --retries 5 \
  --timeout 2h

# 示例3:增量备份
rclone sync source: dest: \
  --min-age 24h \
  --max-age 30d \
  --delete-excluded \
  --fast-list \
  --compare timestamp \
  --backup-dir dest:archive/$(date +%Y%m)

故障排查命令

bash
# 1. 测试连接
rclone lsd remote: --dump auth --dump headers

# 2. 查看配置
rclone config show remote

# 3. 测试速度
rclone about remote:

# 4. 详细调试
rclone -vv --dump bodies copy source:test dest: 2>&1 | less

# 5. 网络诊断
rclone copy source:test dest: --no-check-certificate --timeout 30s --contimeout 10s

这个速查表涵盖了 Rclone 最常用的参数和场景,可以根据具体需求组合使用。关键是要根据数据特性(文件大小、数量、网络条件)调整参数以获得最佳性能。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/318421.html

(0)
上一篇 2天前
下一篇 5小时前

相关推荐

发表回复

登录后才能评论