本文目录导读:

当然可以!实用脚本完全可以批量格式化,而且这正是脚本的强项之一,批量格式化能极大提高效率,尤其是在处理大量文件时。
核心思路:使用脚本循环遍历多个文件,对每个文件执行格式化命令/函数。
下面我会从 常见场景 和 具体脚本示例 两方面给你一些实用方案。
常见批量格式化场景
- 代码文件格式化(最常用)
- 前端:HTML, CSS, JavaScript/TypeScript, JSON, Markdown
- 后端:Python, Go, Java, C++, SQL
- 数据文件格式化
- 表格数据:CSV, Excel (.xlsx, .xls)
- 配置文件:YAML, TOML, INI
- 日志文件:统一时间戳、对齐列
- 文本文件格式化
- JSON/XML 缩进美化/压缩
- Markdown 表格对齐
- 去除多余空格、统一换行符
- 图片/视频元数据格式化(较少见但实用)
EXIF 信息清理或统一
实用脚本示例(Shell/Bash + 常见工具)
批量格式化 JavaScript/TypeScript/CSS/JSON 文件 (使用 prettier)
prettier 是一个很流行的代码格式化工具,支持多种语言。
#!/bin/bash
# 文件名: format-code.sh
# 用法: ./format-code.sh
# 确保 prettier 已安装 (npm install -g prettier)
echo "开始格式化所有 .js, .ts, .css, .json 文件..."
# 使用 find 查找文件,-exec 对每个文件执行 prettier --write
find ./src -type f \( -name "*.js" -o -name "*.ts" -o -name "*.css" -o -name "*.json" \) \
-exec npx prettier --write {} \;
echo "格式化完成!"
进阶:使用 prettier --list-different 可以先检查差异,再决定是否写入。
批量格式化 Python 文件 (使用 black)
black 是 Python 的代码格式化工具,风格非常统一。
#!/bin/bash # 文件名: format-python.sh # 用法: ./format-python.sh # 确保 black 已安装 (pip install black) echo "开始格式化所有 .py 文件..." # 对整个目录直接运行 black 即可递归处理 black ./src --line-length 120 # 设置最大行宽 echo "Python 格式化完成!"
批量格式化 JSON 文件 (使用 jq)
jq 是处理 JSON 的瑞士军刀,也可以用于格式化(美化输出)。
#!/bin/bash
# 文件名: format-json.sh
# 用法: ./format-json.sh
echo "开始格式化当前目录下所有 .json 文件..."
# 备份原始文件(可选)
mkdir -p ./json_backup
for file in *.json; do
if [ -f "$file" ]; then
echo "格式化: $file"
# 备份原始文件
cp "$file" "./json_backup/${file}.bak"
# 使用 jq 格式化(缩进为4空格)
jq --indent 4 '.' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
fi
done
echo "所有 JSON 文件格式化完成,原始备份保存在 ./json_backup/"
批量格式化 Markdown 表格 (使用 pandoc + vim 或其他)
Markdown 表格对齐相对复杂,一个实用方法是使用 pandoc 的表格功能,或借助 vim 宏。
简化方案:使用 markdown-table-formatter 工具(Node.js)
# 安装: npm install -g markdown-table-formatter
# 批量格式化当前目录及子目录下所有 .md 文件
#!/bin/bash
# 文件名: format-md-table.sh
echo "格式化所有 Markdown 文件中的表格..."
# 使用 find + xargs 高效处理
find ./docs -name "*.md" -print0 | xargs -0 -I {} sh -c '
echo "处理: {}"
markdown-table-formatter {} -w # -w 表示覆盖写入
'
echo "Markdown 表格格式化完成!"
批量格式化 CSV/Excel 文件 (使用 Python + pandas)
#!/usr/bin/env python3
# 文件名: format_tables.py
# 用法: python3 format_tables.py
import pandas as pd
import glob
import os
def format_csv(filepath):
"""格式化单个 CSV 文件:统一编码、去除首尾空格、标准化日期"""
try:
# 尝试多种编码读取
for enc in ['utf-8', 'gbk', 'latin1']:
try:
df = pd.read_csv(filepath, encoding=enc)
break
except:
continue
else:
print(f"无法读取: {filepath}")
return
# 去除所有字符串列的首尾空格
df = df.apply(lambda col: col.str.strip() if col.dtype == 'object' else col)
# 写入为 UTF-8(无 BOM)
df.to_csv(filepath, index=False, encoding='utf-8-sig')
print(f"已格式化: {filepath}")
except Exception as e:
print(f"格式化失败 {filepath}: {e}")
def format_excel(filepath):
"""格式化 Excel 文件(类似操作)"""
try:
df = pd.read_excel(filepath)
df = df.apply(lambda col: col.str.strip() if col.dtype == 'object' else col)
df.to_excel(filepath, index=False)
print(f"已格式化: {filepath}")
except Exception as e:
print(f"格式化失败 {filepath}: {e}")
# 批量处理
if __name__ == "__main__":
print("开始批量格式化表格文件...")
# 处理所有 CSV 文件
for f in glob.glob("./data/**/*.csv", recursive=True):
format_csv(f)
# 处理所有 Excel 文件
for f in glob.glob("./data/**/*.xlsx", recursive=True):
format_excel(f)
print("所有表格格式化完成!")
通用批量格式化脚本模板
这是一个非常通用的 Shell 脚本模板,你可以根据需要修改:
#!/bin/bash
# 通用批量格式化脚本模板
# 使用方式: ./batch_format.sh [目录路径] [文件后缀]
# 默认参数
TARGET_DIR="${1:-.}" # 默认为当前目录
FILE_EXT="${2:-*.txt}" # 默认为 .txt 文件
BACKUP_DIR="${TARGET_DIR}/bak_$(date +%Y%m%d_%H%M%S)"
# 定义格式化函数
format_file() {
local file="$1"
echo "正在格式化: $file"
# --- 在这里替换你的格式化逻辑 ---
# 示例:使用 sed 去除行尾空格
sed -i 's/[[:space:]]*$//' "$file"
# ---------------------------------
}
# 主逻辑
echo "开始批量格式化..."
echo "目录: $TARGET_DIR"
echo "后缀: $FILE_EXT"
echo "备份: $BACKUP_DIR"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 查找文件并处理
find "$TARGET_DIR" -type f -name "$FILE_EXT" | while read -r file; do
# 备份原始文件
cp "$file" "$BACKUP_DIR/"
# 格式化
format_file "$file"
done
echo "批量格式化完成!原始文件备份在: $BACKUP_DIR"
高级技巧与建议
- 先备份:批量操作前务必先备份,或将脚本设计为生成新文件(如
.formatted),安全第一。 - 幂等性:好的格式化脚本应该是幂等的——多次运行结果一致。
- 版本控制配合:在 Git 中使用
pre-commit钩子,提交前自动格式化。 - 并行处理:如果文件很多,使用
xargs -P或 GNUparallel可以大幅提速。 - 只格式化变更的文件:结合
git diff --name-only可以只处理改动过的文件,效率更高。
最后:只要你能定义一个明确的“格式化规则”,无论多复杂(正则替换、对齐、重命名列等),都可以写成脚本批量执行,这比手动操作要可靠得多。