Ronan Blog

罗华东的博客 | 向前每多走一步,热爱和勇气就会多一分。

「图床」md 图片链接替换

2024-09-03 1 min read Docs Ronan

在 main 函数的 old_domain 为旧的图片链接,new_domain 是新的图片链接,根据自身情况填写。

将以下代码保存为 re.py ,使用方法:usage: re.py [-h] input_dir,参数是一个目录路径。

import os
import argparse
import re

class LinkReplace:
    def __init__(self, old_domain=None, new_domain=None, input_dir=None):
        self.old_domain = old_domain
        self.new_domain = new_domain
        self.input_dir = input_dir

        if not self.old_domain or not self.new_domain or not self.input_dir:
            raise ValueError("Both old_domain and new_domain must be provided")

    def replace_ibl_in_md(self): # 替换 md 文档的图片链接
        # 匹配 Markdown 文件中的图片链接的正则表达式
        image_pattern = re.compile(r'!\[.*?\]\((.*?)\)')

        for file_name in os.listdir(self.input_dir):
            # 拼接完整的文件路径
            file_path = os.path.join(self.input_dir, file_name)

            if file_path.endswith('md'):
                # 打开并读取文件内容
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()

                # 查找符合条件的图片链接
                links = image_pattern.findall(content)

                modified = False

                # 遍历找到的链接
                for link in links:
                    if self.old_domain in link:
                        # 只替换包含 old_domain 的链接
                        updated_link = link.replace(self.old_domain, self.new_domain)
                        content = content.replace(link, updated_link)
                        modified = True

                    # 如果内容有更改,则写回文件
                    if modified:
                        with open(file_path, 'w', encoding='utf-8') as f:
                            f.write(content)
                        print(f"Updated links in: {file_path}")

    def get_ibl_in_md(self): # 输出 md 文档中所有的图片链接
        # 匹配 Markdown 文件中的图片链接的正则表达式
        image_pattern = re.compile(r'!\[.*?\]\((.*?)\)')

        for file_name in os.listdir(self.input_dir):
            # 拼接完整的文件路径
            file_path = os.path.join(self.input_dir, file_name)

            if file_path.endswith('md'):
                # 打开并读取文件内容
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()

                # 查找符合条件的图片链接
                link = image_pattern.findall(content)

                if link:
                    print(f"{file_path}: {link}")

def main():

    parser = argparse.ArgumentParser(description="传入一个目录,替换目录下所有 md 文档的图片链接")
    parser.add_argument("input_dir", help="输入目录路径")

    args = parser.parse_args()

    # 要替换的域名
    old_domain = ""
    new_domain = ""

    lr = LinkReplace(old_domain, new_domain, args.input_dir)

    lr.replace_ibl_in_md()
    lr.get_ibl_in_md()


if __name__ == "__main__":
    main()

RonanBlog 备份自动化

2024-09-03 4 min read Docs Ronan

本文仅适用于Huxpro 博客及其模板 !!!

准备 backup.py 以及 backup

1.在 仓库根目录 下新建一个 backup 空目录,「为防止 github 自动忽略空目录,所以可以在backup 里面随便新建一个 t.md」
2.将以下代码保存为 backup.py 并且放置到 仓库根目录

backup.py 源码:

import os
import re
import argparse

class Backup:

    def __init__(self, source_path, backup):
        # 备份的文档路径
        self.backup = backup
        # 带日期前缀的博文目录
        self.source_path = source_path

    def process_file(self, file_name):
        # 去掉文件元数据和名称前面的日期

        removing_date_file = re.sub(r'^\d{4}-\d{2}-\d{2}-', '', file_name)

        # 读取文件内容并移除 YAML 前置事项
        with open(f"{self.source_path}/{file_name}", 'r', encoding='utf-8') as file:
            content = file.read()

        # 使用正则表达式找到并去掉第一个以“---”分隔的部分
        content = re.sub(r'^---.*?---\s*', '', content, flags=re.DOTALL)

        # 将修改后的内容写入新的文件
        with open(f"{self.backup}/{removing_date_file}", 'w', encoding='utf-8') as new_file:
            new_file.write(content)

    def delete_old_file(self):
        # 获取 backup 目录下的所有 md 文件
        backup_files = {f for f in os.listdir(self.backup) if f.endswith('.md')}

        # 获取 _posts 目录下的所有 md 文件
        source_files = {f for f in os.listdir(self.source_path) if f.endswith('.md')}

        # 获得_posts 目录下去除日期后的文件名的集合
        intermediate_name = {re.sub(r'^\d{4}-\d{2}-\d{2}-', '', f) for f in source_files}

        # 找出在 backup 目录中但不在 source 目录中的文件
        unmatched_files = backup_files - intermediate_name

        # 删除这些不一致的文件
        for file_name in unmatched_files:
            file_path = os.path.join(self.backup, file_name)
            os.remove(file_path)

    def get_post_name(self) -> list[str]:

        post_names = []
        for post_name in os.listdir(self.source_path):
            if post_name.endswith('.md') or post_name.endswith('.txt'):
                post_names.append(post_name)

        return post_names

def main():
    parser = argparse.ArgumentParser(description='Process a file to remove date from filename and YAML front matter.')

    # 添加一个位置参数来接受文件路径
    parser.add_argument('source_path', type=str, help='需要备份的目录')
    parser.add_argument('backup', type=str, help='备份文件存放的目录')

    # 解析命令行参数
    args = parser.parse_args()

    # 创建 Backup 类的实例
    backup = Backup(args.source_path, args.backup)
    post_names = backup.get_post_name()

    for post_name in post_names:
        backup.process_file(post_name)

    backup.delete_old_file()

    print("backup succeed")

if __name__ == '__main__':
    main()

修改actions

将仓库根目录下的 .github/workflows/jekyll.yml 内容修改为:

Continue reading

「各种摸不着头脑」意外修改PATH(环境变量)

2024-09-03 1 min read Linux Ronan

1. 检查sudo是否已经安装

确保 sudo 已经正确地安装在你的系统中。你可以通过运行 which sudo 来检查它的路径。这应该会出现以下内容

❯ which sudo
/usr/bin/sudo

如果它没有返回任何内容,那么你需要安装 sudo。在大多数 Linux 发行版上,你可以使用包管理器来安装 sudo。例如,在 Ubuntu 上,你可以使用以下命令安装:

sudo apt-get install sudo

在其他发行版上,你可能需要使用不同的命令来安装 sudo

2.手动指定sudo命令的路径

如果你知道 sudo 命令的确切路径,你可以在使用时直接指定它的路径。例如:

/usr/bin/sudo /usr/bin/vim .bashrc

修复PATH环境变量:更彻底的解决方法是修复 PATH 环境变量,使得系统能够找到 sudo 命令。你可以编辑你的 .bashrc 文件,将正确的路径添加到 PATH 环境变量中。你可以使用下面的命令来编辑 .bashrc 文件:

export PATH=$PATH:/usr/bin

然后保存文件并重新启动终端,或者运行 source ~/.bashrc 来使修改生效。

3. 重启系统(针对一些Linux系统,macOS通常不需要)

在修改了环境变量之后,可能需要重启系统才能使其生效。

Older posts Newer posts