【工具】有道云笔记图片自动迁移脚本

  • hello,大家晚上好,我是你们的老朋友 Lorin。
  • 最近发布文章遇到了一个很难受的问题,我自己本地写文章使用的是有道云笔记,导致图片无法再其它平台同步,导致自己需要苦逼的将每张图片都要上传一次,因为不再自己的图床,手动搬了几天可把自己恶心坏了,那么出现问题就得解决问题,总不能解决提出问题的人吧!!!

懒惰是科技进步的最强的动力

  • 正所谓懒惰是科技进步的第一生产力,没办法只能自己写一个脚本先解决图片的问题。
  • 解决思路大致就是扫描目录的下的所有文件,匹配出文件中所有需要进行处理的链接,然后使用配置的 cookie 将图片下载到本地,然后再上传的自己的文件服务器,最后用自己文件服务器的链接替换掉文章中的原始链接。
  • 为了使用方便使用 bash 脚本实现,完整代码如下:
bash 复制代码
#!/bin/bash

# 解析函数,根据参数名称提取对应的值
function get_query_param() {
    local param_name="$1"
    local query_string="$2"

    local param_value=$(echo "$query_string" | grep -oP "(?<=${param_name}=)[^&]+")
    echo "$param_value"
}


# 设置参数
source_dir="./test"  # 指定源目录
output_dir="./test/out"  # 指定输出目录

# 替换为需要的 Cookie
cookie="xxxxxx"


# 替换为上传服务器的地址
upload_server="xxx.cc"

# 创建输出目录
mkdir -p "$output_dir"

# 遍历指定目录下的所有 Markdown 文件

find "$source_dir" -type f -name "*.md" | while read -r markdown_file; do
    echo "处理文件: $markdown_file"

    # 从文件中提取所有正则表达式匹配的 URL
    urls=$(grep -oE 'https://junqiu.cc/temp-photos/w2XZqYjgmN. https://junqiu.cc/temp-photos/r64zNV6LDI.)

    # 创建输出文件路径
    output_file="$output_dir/$(basename https://junqiu.cc/temp-photos/r64zNV6LDI.)"

    # 复制 Markdown 文件到输出目录
    cp -f https://junqiu.cc/temp-photos/r64zNV6LDI. "$output_file"

    # 遍历匹配的 URL
    for url in $urls; do
        echo "下载并上传 URL: $url"

        redirected_url=$(curl -s -L -b "Cookie: $cookie" -w %{url_effective} -o /dev/null "$url")
        echo "解析重定向地址成功:$redirected_url"

        # 解析文件名
        originfilename=$(get_query_param "download" "$redirected_url")
        filename="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1).${originfilename##*.}"
        echo "获取文件名成功:$filename"

        # 使用 curl 下载重定向后的文件
        curl -L -b "Cookie: $cookie" "$redirected_url" -o "$output_dir/$filename"

        # 这个需要在服务器配置公钥 或者 使用 sshpass 配置密码
        # 使用 ssh 秘钥 和 sftp 上传文件到 Nginx 服务器目录下
        sftp "root@${upload_server}:html/temp-photos" <<EOF
put "$output_dir/$filename"
bye
EOF

        # 获取 FTP 服务器上的新 URL
        new_url="https://${upload_server}/temp-photos/$filename"
        echo "重新生成 URL: $new_url"

        # 在 Markdown 文件中替换链接为新的 URL
        sed -i "s|$url|$new_url|g" "$output_file"
    done
done

echo "任务处理完成!"
  • 执行一下,大功告成:

我还可以再懒一点

  • 虽然这样已经解决了大部分问题,但是每次写完文章都要各个去上传还是让我这个懒人受不了,得让科技再进步一下。
  • 因此,我决定找找有没有文章多平台同步工具,很遗憾的是有一个但是作者已经停更了,那么没有就只能造一个了,如果有相同需求的小伙伴可以私聊给我提提意见,预计下个月出第一个版本。

思路

  • 目前的主要思路还是通过 web 端实现,然后同步到其它平台,中间会做一些格式转换和优化,web 端第一个版本仅会支持 markdown。

  • 最后,写作不易,大家多多点赞关注支持一下作者,非常感谢。

相关推荐
David爱编程几秒前
Java 守护线程 vs 用户线程:一文彻底讲透区别与应用
java·后端
小奏技术18 分钟前
国内APP的隐私进步,从一个“营销授权”弹窗说起
后端·产品
小研说技术36 分钟前
Spring AI存储向量数据
后端
苏三的开发日记36 分钟前
jenkins部署ruoyi后台记录(jenkins与ruoyi后台处于同一台服务器)
后端
苏三的开发日记38 分钟前
jenkins部署ruoyi后台记录(jenkins与ruoyi后台不在同一服务器)
后端
陈三一43 分钟前
MyBatis OGNL 表达式避坑指南
后端·mybatis
whitepure43 分钟前
万字详解JVM
java·jvm·后端
我崽不熬夜1 小时前
Java的条件语句与循环语句:如何高效编写你的程序逻辑?
java·后端·java ee
我崽不熬夜1 小时前
Java中的String、StringBuilder、StringBuffer:究竟该选哪个?
java·后端·java ee
我崽不熬夜2 小时前
Java中的基本数据类型和包装类:你了解它们的区别吗?
java·后端·java ee