使用ChatGPT+Mac终端机整理文件的一次尝试

跟往常一样，在日常跟诊中，获取完患者的证素后，在心里默想自己方子，再比对老师开的方，药味与剂量不相差三味为佳。不过，今日的主题不是跟着老师门诊抄方辨证，老师的门诊有记录电子病案的习惯，小电脑上已经陆陆续续地记录下七八年的病例，每一份都以 txt 格式保存在 Windows 7 系统下，这是一个很好的学习老师临床思想的材料，十分适合做数据分析。

作为一个长期使用 Obsidian 进行笔记和资料管理的人，我决定将这些病案导入 Obsidian 作为我的病例学习资料库，Obsidian 强大的插件库和本地离线存储都满足我的需求，以及全局检索极大方便了获取方剂信息。

见招拆招

然而，当我将文件拷贝到我自己的 Mac 中后，问题接踵而至。

首先，Windows 与 Mac 系统的文本格式不同，许多 txt 文件在拷贝到 Mac 后出现乱码，甚至无法打开。经过检查，原因是老师小电脑 Windows7 采用的是 GB18030 编码格式，而 Mac 使用的是 UTF-8 格式，具体可详见知乎上的一则解释：为什么 Windows 中文默认使用 GB18030 而不是 UTF-8？

其次，Obsidian 使用 Markdown 格式进行存储，这意味着我需要将几千例病案转换成 md 格式。

但这些都是小问题，使用 Terminal（终端机）两行代码即可解决。

iconv 命令

将 GB18030 文本格式转换成 Unicode UTF-8 格式（基础 iconv 命令）：

iconv -f GB18030 -t UTF-8 原始文件.txt -o 输出的文件.txt

iconv 是一个用于转换文件编码的工具，这条命令行可以理解为 “使用 iconv 命令，for GB18030 文件 to UTF-8 文件，output 输出转换后的文件”。但面对上千个病例文件，我们需要进行批量转换的命令：

批量转换的 iconv 命令

for file in *.txt; do iconv -f GB18030 -t UTF-8 "$file" > "${file}.txt"; done

mv 命令

解决了编码格式的问题，再看如何转换 Obsidian 支持的 markdown 格式文件：

将.txt 文件转换为.md 格式（基础转换文件扩展名命令）：

mv 文件.txt 文件.md

mv 是 “移动 / 重命名” 命令，以改变文件的扩展名，可以理解为 “Move .txt 文件为.md 文件 “。批量转换命令行为：

批量转换.md 格式命令：

for file in *.txt; do mv "$file" "${file%.txt}.md"; done

借东风

本以为转换完，资料库的整理就可以告一段落了，但经过初步检查门诊病案文件，发现令人头疼的问题！

病案中存在重复的文件

重复的文件中存在 “文件名相同”，但 “内容不同” 的情况

面对数千个病例文件，手动逐一检查、删除冗余文件？显然不现实，不仅是对一个正直风华正茂的你和我时间上的极大浪费，而且重复千百次的机械操作，令人心生退意，想想就让人头皮发麻。

在多次苦思之后，我决定借个时代的东风，运用起 ChatGPT 的编程能力，来帮助我完成这些琐碎的工作。

与 ChatGPT 沟通

ChatGPT 的写代码业务能力已经十分出色了，但大部分时候仍然会输出不满意的结果。那么重点应当着眼于与 ChatGPT 的沟通技巧上。

提出问题，旨在让 GPT 输出解释教程。

需求要写得详细，和你写论文一样详细，每一步都要清清楚楚。

反复沟通，就像导师让你反复修改开题报告一般，给 GPT 提要求，GPT 会联系上下文，满足你的要求。

若遇到不懂的知识点，另开一篇 “新交谈”，以不影响当前对话。

若反复修改的结果不满意，需开新的对话框，找出前段沟通出现的问题，整理提问文本，重新进行输出，直到满意为止。

备份原文件，进行小样本试验，若出现问题，反馈 GPT 进行修改，重复 3-5 步骤。

以下是我最终的提问文本（另开 “新交谈” GPT 输出结果，结果满意，耶！）

ChatGPT 输出结果

Copy
# 创建必要的目标文件夹
mkdir -p 无重复 重复1 重复2 不全重复1 不全重复2

# 遍历 folder1 和 folder2 中的所有 Markdown 文件
for file in folder1/*.md folder2/*.md; do
# 获取文件名
filename=$(basename "$file")

# 定义两个文件的完整路径
file1="folder1/$filename"
file2="folder2/$filename"

# 检查两个文件是否都存在
if [[ -f "$file1" && -f "$file2" ]]; then
# 计算两个文件的 MD5 校验和
md5_1=$(md5 -q "$file1")
md5_2=$(md5 -q "$file2")

# 比较校验和
if [[ "$md5_1" != "$md5_2" ]]; then
# 校验和不同，移动到不全重复文件夹
mv "$file1" 不全重复1/
mv "$file2" 不全重复2/
else
# 校验和相同，移动到重复文件夹
mv "$file1" 重复1/
mv "$file2" 重复2/
fi
else
# 如果只有一个文件存在，移动到无重复文件夹
if [[ -f "$file1" ]]; then
mv "$file1" 无重复/
fi
if [[ -f "$file2" ]]; then
mv "$file2" 无重复/
fi
fi
done

# 将 “重复1” 和 “不全重复1” 中的文件移动到 “无重复” 文件夹
mv 重复1/* 无重复/
mv 不全重复1/* 无重复/

# 删除所有空文件夹
find . -type d -empty -delete

（这段命令行可直接开箱食用～ 但要注意一定要先 cd 文件夹！）

具体操作如下：

预先重命名俩文件夹为 folder1 和 folder2，并移入新建父级文件夹；

打开电脑的终端机 (Terminal)；

使用 cd 命令切换到要转换文件的父级文件夹；

输入上段命令行

确认所有文件夹的文件数与分类前的总数相同，如无异，则删除重复 2 文件夹，整理剩余文件夹。

附：用 ChatGPT 优化转换编码与文件格式步骤

明确需求：批量转换文件夹中 GB18030 为 Unicode UTF-8 格式并换成.md 格式！
在 ChatGPT 对话提出需求：

验证命令行时发现的具体问题，反馈 GPT 进行修改：

GPT 反馈最终结果以及操作步骤

打开电脑的终端机 (Terminal)；

使用 cd 命令切换到要转换文件的目录；

输入以下命令：

Copy
mkdir -p utf8_markdown_files failed_files && for file in *.txt; do filename="${file%.txt}"; iconv -f GB18030 -t UTF-8 "$file" > "utf8_markdown_files/${filename}.md" && echo "已转换: $file -> utf8_markdown_files/${filename}.md" || { mv "$file" failed_files/ && echo "转换失败，已移动: $file -> failed_files/"; }; done

检查转换失败的.txt 文件，大致因为已经是 UTF-8 格式，先 cd 指定 failed_files 文件夹，再使用以下命令再进行批量转换：

for file in *.txt; do mv "$file" "${file%.txt}.md"; done
转换完成后，取代原先的文件以合并两个文件夹。

这就是芸芸众生中，一个人类为解决某特定需求而尝试接触新事物的一次尝试～
关于 ChatGPT 协助完成工作方面的嘛，就像中医找齐证素并准确辨证，开出了一份个性化处方。只要找对方法，都能抵达目标！