f2是一款由开发者ayoisaiah使用Go语言开发的轻量级、高性能、跨平台命令行批量文件重命名工具。得益于Go语言的特性,它编译为静态二进制文件,具备极强的可移植性和执行效率,可在Linux、macOS和Windows等主流操作系统上无缝运行。其设计哲学聚焦于“简单、快速、安全”,旨在为用户提供一种直观且功能强大的方式来批量修改文件名,尤其适合处理大量文件或遵循复杂命名规则的场景。
相比传统的重命名工具(如Linux下的rename命令),f2提供了更友好的交互式预览机制、强大的正则表达式支持、大小写转换、序列编号、扩展名处理等高级功能。最关键的是,它默认以“干运行”(dry-run)模式启动,确保用户在最终执行前可以清晰预览所有变更,有效避免了误操作风险。
核心特性
-
跨平台支持
基于Go编译生成的静态二进制文件,无需任何外部运行时环境,真正做到下载即用。
-
交互式预览(Dry-run模式)
默认启用预览模式,清晰列出所有计划中的重命名操作,用户确认无误后才真正执行,安全可靠。
-
强大的正则表达式支持
完整支持Go标准库的正则语法(RE2引擎),能够灵活匹配和替换文件名中的任意模式。
-
多种内置转换函数
• 大小写转换(upper, lower, title)
• 序列编号(如 file001.jpg, file002.jpg)
• 扩展名保留或替换
• 自动移除非法字符(如Windows系统不支持的<>:"/\|?*)
-
完善的安全机制
• 自动检测重命名冲突(例如两个文件将被重命名为相同名称)
• 默认跳过已存在的目标文件
• 可通过--overwrite参数显式指定强制覆盖
-
支持子目录递归操作
通过-r或--recursive参数,可对指定目录及其所有子目录下的文件进行批量重命名。
-
高度可定制化
用户可以通过组合不同的命令行参数,实现复杂的重命名逻辑。
-
开源免费
项目采用MIT许可证,完全开源,社区友好。
安装部署指南
1. 官方资源
• GitHub仓库:https://github.com/ayoisaiah/f2
• 官方文档:https://f2.freshman.tech/guide/getting-started.html
• Releases下载:https://github.com/ayoisaiah/f2/releases
2. 安装方式
✅ 方式一:下载预编译二进制文件(推荐)
- 访问Releases页面。
- 根据操作系统选择对应版本:
• Linux: f2_linux_amd64
• macOS: f2_darwin_amd64 或 f2_darwin_arm64(适用于Apple Silicon芯片)
• Windows: f2_windows_amd64.exe
- 下载后,在Linux/macOS上赋予执行权限并移动到系统路径:
chmod +x f2_linux_amd64
sudo mv f2_linux_amd64 /usr/local/bin/f2
- 验证安装:
f2 --version
✅ 方式二:使用包管理器安装
• Homebrew (macOS/Linux):
brew install f2
• Scoop (Windows):
scoop bucket add extras
scoop install f2
• Arch Linux (AUR):
yay -S f2-bin
# 或使用 paru
# paru -S f2-bin
✅ 方式三:从源码编译(需Go环境)
- 确保已安装Go(版本≥1.18)。
- 克隆仓库并编译:
git clone https://github.com/ayoisaiah/f2.git
cd f2
go build -o f2 .
- 将生成的
f2可执行文件移动到PATH环境变量包含的目录中。
基本使用示例
示例1:简单字符串替换
将所有以old_开头的.txt文件重命名为以new_开头:
f2 -f "old_" -r "new_" old_*.txt
命令执行前会显示变更预览,按回车确认后才会实际执行重命名。
示例2:使用正则表达式提取并重组
原始文件:photo_20230501.jpg, photo_20230502.jpg
目标格式:vacation_0501.jpg, vacation_0502.jpg
f2 -f "photo_\\d{4}(\\d{4})" -r "vacation_$1" *.jpg
此命令匹配photo_后跟8位数字,并捕获后4位作为分组$1用于替换。
示例3:添加序列编号
将a.txt, b.txt, c.txt重命名为doc_001.txt, doc_002.txt, doc_003.txt:
f2 -f ".*" -r "doc_{num}" *.txt
其中{num}是f2的特殊占位符,代表自动递增的编号(默认三位数,可配置)。
示例4:转为小写并替换空格
f2 -f " " -r "_" -c lower *.MP4
-c lower参数表示将最终结果全部转为小写。命令先將空格替换为下划线,再对整个文件名进行小写转换。
示例5:递归处理子目录
将指定目录及其子目录下所有.JPG扩展名改为小写.jpg:
f2 --find "\\.JPG$" --replace ".jpg" --recursive /path/to/photos
使用长参数--find, --replace, --recursive可以使命令意图更清晰,避免与替换标志-r混淆。
高级功能与技巧
1. 占位符支持
f2支持以下特殊占位符,使重命名规则更灵活:
• {num}:自动递增数字(格式如001, 002...)
• {ext}:原文件的扩展名(不含点号)
• {basename}:原文件名(不含路径和扩展名)
例如,创建带序号的文件备份:
f2 -f ".*" -r "backup_{num}.{ext}" *.log
2. 大小写转换选项
• -c upper:将所有字符转换为大写。
• -c lower:将所有字符转换为小写。
• -c title:将每个单词的首字母转换为大写。
3. 冲突处理策略
• 默认行为:当目标文件名已存在时,跳过当前重命名操作。
• 强制覆盖:使用--overwrite参数,遇到冲突时直接覆盖已存在的文件。
4. 输出控制
• --quiet:启用静默模式,不显示预览信息(请谨慎使用)。
• --verbose:启用详细模式,显示更全面的操作日志。
典型应用场景
• 整理摄影素材:统一数码照片的命名格式(如IMG_xxx -> 旅行日记_xxx)。
• 处理下载内容:批量移除视频文件名称中的广告或冗余前缀。
• 开发者重构代码:快速重命名大量测试文件(如xxx_test.go -> test_xxx.go)。
• 系统文件清理:修正从Windows系统传输到Linux后文件名中包含的非法字符。
• 自动化运维脚本:将f2集成到CI/CD或日常维护脚本中,实现文件名的自动化整理。
常见问题(FAQ)
Q:f2会修改文件的内容吗?
A:不会。f2仅操作文件的名称(元数据),不会以任何方式读取或修改文件的实际内容。
Q:能否使用f2重命名目录(文件夹)?
A:截至目前(v2.x版本),f2仅支持对文件进行重命名,不支持直接重命名目录。
Q:如何取消一次已经输入但未确认的命令?
A:在预览阶段,直接按Ctrl+C组合键即可中断命令,不会执行任何更改。
Q:f2支持中文等Unicode文件名吗?
A:完全支持。由于底层使用Go语言开发,原生支持UTF-8编码,可以完美处理中文、日文、韩文等任何Unicode字符组成的文件名。
总结
f2是一款契合现代开发习惯的高效、安全的批量重命名命令行工具。它凭借简洁直观的接口、强大的正则处理能力以及默认的安全预览机制,在众多同类工具中表现突出。无论是用于日常文件整理,还是集成到更复杂的自动化流程中,f2都是一个非常可靠且功能全面的选择。