Logo 📚 Digital Library

图床 | Chevereto

好的,我帮你把所有功能 整合成一个完整的 CLI 工具,你只需要:

./chevereto-tool <命令>

即可使用!

下面是一个完整的、可直接运行的 Bash 工具:

🚀 **Chevereto 多功能命令行工具 chevereto-tool**#

功能列表(全部集成)#

功能命令说明
replace-urls批量替换 Markdown 中旧图床 → 新图床
check-links扫描所有 Markdown 图片链接,检测 404 坏链
upload-local把 Obsidian 本地图片上传到 Chevereto,并自动替换 Markdown 链接
migrate-minio从 MinIO 批量迁移图片 → 上传到 Chevereto
help查看帮助

📌 使用步骤#

  1. 新建脚本:
nano chevereto-tool
  1. 将以下完整代码粘贴进去:

✅ **完整脚本:chevereto-tool**#

(已带完整注释,非常清晰)

#!/usr/bin/env bash

##############################################
# Chevereto 多功能图床工具
# 功能:
# 1. replace-urls   替换 Markdown 里的旧图床链接
# 2. check-links    检查图片链接是否 404
# 3. upload-local   上传本地图片并替换 Markdown 链接
# 4. migrate-minio  从 MinIO 批量迁移图片到 Chevereto
##############################################

### === 配置区(按需修改) === ###

# Chevereto 服务(你的域名)
CHEVERETO_URL="https://img.isrv.cn"

# 从 Chevereto 后台获取
CHEVERETO_API_KEY="替换成你的APIKey"

# Obsidian 仓库位置
VAULT_DIR="$HOME/Obsidian"

# 本地图片存放处(按实际目录调整)
LOCAL_IMG_DIR="$VAULT_DIR/img"

# 旧 → 新 URL 替换
OLD_URL="https://s3.isrv.cn/img/"
NEW_URL="https://img.isrv.cn/images/"

# MinIO 读取地址
MINIO_URL="https://s3.isrv.cn/img"

##############################################
# 工具函数:上传图片到 Chevereto
##############################################

upload_to_chevereto() {
    local file="$1"

    RESPONSE=$(curl -s -X POST \
        -F "source=@$file" \
        -F "key=$CHEVERETO_API_KEY" \
        "$CHEVERETO_URL/api/1/upload")

    echo "$RESPONSE"
}

##############################################
# 功能 1: 替换 Markdown 里的旧图床链接
##############################################

replace_urls() {
    echo "开始替换 Markdown 链接:"
    echo "$OLD_URL → $NEW_URL"
    
    TOTAL=0
    MODIFIED=0

    while IFS= read -r -d '' FILE; do
        ((TOTAL++))
        if grep -q "$OLD_URL" "$FILE"; then
            ((MODIFIED++))
            cp "$FILE" "$FILE.bak"
            sed -i "s#$OLD_URL#$NEW_URL#g" "$FILE"
            echo "[修改] $FILE"
        fi
    done < <(find "$VAULT_DIR" -type f -name "*.md" -print0)

    echo "处理文件总数:$TOTAL"
    echo "替换文件数量:$MODIFIED"
}

##############################################
# 功能 2:检查 Markdown 图片链接是否 404
##############################################

check_links() {
    LOG="./broken_links.log"
    echo "" > "$LOG"

    echo "开始扫描 Markdown 里的图片链接……"

    grep -Roh --include="*.md" "$NEW_URL[^ )]*" "$VAULT_DIR" | while read -r url; do
        HTTP=$(curl -s -o /dev/null -w "%{http_code}" "$url")
        if [[ "$HTTP" != "200" ]]; then
            echo "[坏链] $url (HTTP $HTTP)"
            echo "$url" >> "$LOG"
        fi
    done

    echo "坏链已记录:$LOG"
}

##############################################
# 功能 3:上传本地图片 → 替换 Markdown 链接
##############################################

upload_local() {
    echo "开始上传本地图片:$LOCAL_IMG_DIR"

    while IFS= read -r -d '' IMG; do
        FILENAME=$(basename "$IMG")
        echo "[上传] $FILENAME"

        RESPONSE=$(upload_to_chevereto "$IMG")
        NEW_URL=$(echo "$RESPONSE" | jq -r '.image.url')

        if [[ "$NEW_URL" == "null" ]]; then
            echo "上传失败:$FILENAME"
            continue
        fi

        echo "→ 上传成功:$NEW_URL"
        echo "→ 开始替换 Markdown 中的本地链接..."

        grep -Rl "$FILENAME" "$VAULT_DIR" --include="*.md" | while read -r FILE; do
            sed -i.bak "s#[^( ]*$FILENAME#$NEW_URL#g" "$FILE"
        done

    done < <(find "$LOCAL_IMG_DIR" -type f -print0)

    echo "所有本地图片已上传并替换链接。"
}

##############################################
# 功能 4:迁移 MinIO → Chevereto
##############################################

migrate_minio() {
    TMP_DIR="./minio_tmp"
    mkdir -p "$TMP_DIR"

    echo "开始读取 MinIO 列表:$MINIO_URL/"

    # 获取 MinIO 目录列表
    curl -s "$MINIO_URL/" | grep -oP '(?<=href=")[^"]+' | while read -r FILE; do
        echo "[下载] $FILE"
        curl -s -o "$TMP_DIR/$FILE" "$MINIO_URL/$FILE"

        echo "[上传] $FILE → Chevereto"
        RESPONSE=$(upload_to_chevereto "$TMP_DIR/$FILE")
        NEW_URL=$(echo "$RESPONSE" | jq -r '.image.url')

        echo "→ 上传结果:$NEW_URL"
    done

    echo "迁移完成。"
}

##############################################
# 帮助菜单
##############################################

show_help() {
cat <<EOF
Chevereto 多功能工具

用法:
  ./chevereto-tool <命令>

可用命令:
  replace-urls     替换 Markdown 里的旧图床链接
  check-links      检查 Markdown 图片是否 404
  upload-local     上传本地图片并替换 Markdown 链接
  migrate-minio    从 MinIO 批量迁移图片到 Chevereto
  help             显示帮助信息

EOF
}

##############################################
# 主程序入口
##############################################

case "$1" in
    replace-urls)
        replace_urls
        ;;
    check-links)
        check_links
        ;;
    upload-local)
        upload_local
        ;;
    migrate-minio)
        migrate_minio
        ;;
    help|*)
        show_help
        ;;
esac

✔ 保存后赋予执行权限:#

chmod +x chevereto-tool

🚀 使用示例#

1) 替换旧图床 → 新图床#

./chevereto-tool replace-urls

2) 检查 Markdown 图片是否 404#

./chevereto-tool check-links

3) 上传本地图片并替换 Markdown 链接#

./chevereto-tool upload-local

4) 从 MinIO 批量迁移图片#

./chevereto-tool migrate-minio

5) 查看帮助#

./chevereto-tool help

🎉 你现在拥有一个完整的图床自动化工具!#

如果你愿意,我还能帮你:

✅ 制作为 系统全局命令(cp 到 /usr/local/bin) ✅ 制作成 Docker 版 ✅ 输出运行日志、错误重试 ✅ 加上进度条、颜色输出 ✅ 加上多线程上传(xargs -P 8)

你想继续增强工具吗?