学习日记

让电脑替我改文件名

所里有一批电子卷宗要归档,前辈交代得很简单:文件名前面加上收文日期。一百多份 PDF。

我一开始是手工改的。点开、改名、保存,一个大概二十秒。改到第三十七个的时候,我数了一下还剩多少份,然后就不想数了。

那天晚上我想起 HelloGitHub 里有本开源的 Bash 小书。当时只是存了个书签,觉得「以后也许用得上」。那天晚上就是那个「以后」。

上一次动别人的代码,我只改了一个数字(那篇在这里);这一次大概得自己写几行了。

这本书是什么

《Bash 脚本入门指南》,英文名 Introduction to Bash Scripting,作者 Bobby Iliev,开源免费,一共 23 章。前十三章打基础,从 Hello World、变量、条件讲到循环;后面几章是真实场景里的小脚本。在 GitHub 上搜 introduction-to-bash-scripting 就能找到,仓库里直接给了 PDF 和 ePub 的下载链接。

它不教你写程序,它教你把已经在敲的命令串起来。这是它对我有用的原因——我不需要成为工程师,我只是一百个文件要改名。

有三种读法:网页、PDF、ePub。我读的 PDF。

怎么用

Mac 上打开「终端」(在启动台的「其他」文件夹里),先试最简单的:

echo "hello"

它会原样打印出来。然后是变量:

name="宛瑜"
echo $name

接着是循环。书里讲得很清楚:for 后面跟一个变量,in 后面跟一串东西,do 和 done 把它包起来。

for num in {1..3}
do
  echo $num
done

把 {1..3} 换成 *.pdf,它就会对目录里每一个 PDF 各做一遍:

for f in *.pdf
do
  echo "读到 $f"
done

到这里它还没改任何东西,只是在念文件名。这一步别跳过。

真正动手的是 mv(move 的缩写,它同时也用来改名):

for f in *.pdf
do
  mv "$f" "2026-11-02-$f"
done

把这几行存成一个文件,比如 rename.sh,给它执行权限再运行:

chmod +x rename.sh
./rename.sh

我第一次跑,输出里全是问号。后来才发现文件名里有空格,$f 没加引号被拆成了两半,改成 "$f" 才对。书里提过这件事,我当时跳过去了。

什么时候能用,什么时候不能

能用的场合:批量重命名、批量转格式、按日期整理文件、给一堆照片加前缀。共同点是重复、可预期、做错了还能重来。

不能用的:

  • 在正式卷宗上直接跑。 改名不可逆,mv 没有回收站。我是在备份目录的副本上试的,确认没问题才动正本。
  • 在没有空跑一遍之前跑。 先用 echo 把它要处理的文件列出来,对着清单核对。
  • 把脚本发给同事当「专业工具」。 它只对我这批文件的命名规则有效,换一套规则就会出错,而用的那个人不会知道。

今天学到的

  • 先想清楚「对哪些文件做什么」,再想怎么让电脑做;顺序反了就要返工。
  • 让程序先念一遍再动手,是最便宜的保险。
  • 引号不是装饰。文件名里一个空格,就能让脚本做错事。
  • 一百多份改完用了四十秒。前面手改的那三十七份,花了一个多小时。

← 上一篇 我试了一个不太该试的工具 下一篇 → 把日记搬进一个离线 App

说点什么

回到全部文章 →