相信有些小伙伴在使用Typora
或者其他markdown
时,没有使用图床的情况下会被没有引用的图片烦扰。所以做了个简单的工具希望对大家有所帮助。
文末附源码及代码拉取地址
‼️ 前提:您要在Typora进行如下设置:
确保图片都存储在该文件夹下。
工具介绍
功能
自动清理:
📌 自动识别 Markdown
文件中引用的图片。
📌 清理对应的 .assets
文件夹中未被引用的图片。
安全处理:
🔧 将未引用的图片移动到 deleted_images
文件夹,而非直接删除,避免误删。
可视化操作:
📝 提供图形用户界面(GUI),方便用户选择 Markdown 文件。
📝 实时显示操作结果,包括图片总数、删除或移动的图片数量等信息。
依赖库
仅需 Python 标准库,无需额外安装!
(Python 3.7+ 环境已包含所有依赖)
使用说明
1. 界面操作
2. 操作步骤
步骤 | 操作说明 |
---|---|
选择文件 | 点击 “选择 Markdown 文件并清理” 按钮,在弹出的文件选择对话框中选择要处理的 Markdown 文件。 |
查看结果 | 程序会自动检查对应的 .assets 文件夹,并将未引用的图片移动到 deleted_images 文件夹。操作结果会显示在下方的文本框中。 |
如图:
3. 注意事项
⚠️ 文件存在性:确保选择的 Markdown 文件和对应的 .assets
文件夹存在。
⚠️ 文件权限:确保程序有足够的权限访问和移动图片文件。
对应的 .assets
文件夹存在。
⚠️ 文件权限:确保程序有足够的权限访问和移动图片文件。
运行方式
方式 1:运行源码
安装 Python 3.7+ 环境。
下载或复制源码文件 typora_assets_cleaner.py
。
执行命令:
python typora\_assets\_cleaner.py
方式2:源码或exe
import tkinter as tk
from tkinter import filedialog
import os
import re
import shutil
def find_used_images(md_file):
used_images = []
try:
with open(md_file, 'r', encoding='utf-8') as f:
content = f.read()
pattern = r'!\[.*?\]\((.*?)\)'
matches = re.findall(pattern, content)
for match in matches:
image_name = os.path.basename(match)
used_images.append(image_name)
except FileNotFoundError:
result_text.insert(tk.END, f"错误: 文件 {md_file} 未找到。\n")
return used_images
def clean_assets_folder():
md_file = filedialog.askopenfilename(filetypes=[("Markdown文件", "*.md")])
if not md_file:
return
assets_folder = os.path.splitext(md_file)[0] + '.assets'
if not os.path.exists(assets_folder):
result_text.insert(tk.END, f"错误: {assets_folder} 文件夹不存在。\n")
return
used_images = find_used_images(md_file)
all_images = []
for root, dirs, files in os.walk(assets_folder):
for file in files:
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.svg', '.tiff', '.webp', '.gif')):
all_images.append(file)
result_text.insert(tk.END, f".assets 文件夹中的图片总数为{len(all_images)}\n")
deleted_count = 0
deleted_folder = os.path.join(assets_folder, 'deleted_images')
if not os.path.exists(deleted_folder):
os.makedirs(deleted_folder)
for file in all_images:
if file not in used_images:
file_path = os.path.join(assets_folder, file)
# 检查文件是否存在
if os.path.exists(file_path):
try:
shutil.move(file_path, os.path.join(deleted_folder, file))
result_text.insert(tk.END, f"图片已移动到 {deleted_folder}: {file}\n")
deleted_count += 1
except Exception as e:
result_text.insert(tk.END, f"移动 {file} 时出错: {e}\n")
else:
result_text.insert(tk.END, f"文件 {file} 已不存在,跳过移动操作。\n")
result_text.insert(tk.END, f"删除或移动到deleted_images文件夹的图片数量为 {deleted_count}\n")
root = tk.Tk()
root.title("Typora清理未引用图片")
root.geometry("790x500")
root.configure(bg="#ecf0f1")
button = tk.Button(root, text="选择Markdown文件并清理", command=clean_assets_folder,
font=("微软雅黑", 14), bg="#007BFF", fg="white", padx=20, pady=10)
button.pack(pady=20)
result_text = tk.Text(root, height=18, width=90, font=("微软雅黑", 10))
result_text.pack(pady=20)
root.mainloop()
exe文件可在github下载:https://github.com/qiapicoco/typora-assets-image-cleaner#
代码拉取:
git@github.com:qiapicoco/typora-assets-image-cleaner.git
或
https://github.com/qiapicoco/typora-assets-image-cleaner.git
希望这个工具能帮到您!✨