实用脚本能批量格式化吗?

wen 实用脚本 11

本文目录导读:

实用脚本能批量格式化吗?

  1. 常见批量格式化场景
  2. 实用脚本示例(Shell/Bash + 常见工具)
  3. 通用批量格式化脚本模板
  4. 高级技巧与建议

当然可以!实用脚本完全可以批量格式化,而且这正是脚本的强项之一,批量格式化能极大提高效率,尤其是在处理大量文件时。

核心思路:使用脚本循环遍历多个文件,对每个文件执行格式化命令/函数。

下面我会从 常见场景具体脚本示例 两方面给你一些实用方案。


常见批量格式化场景

  1. 代码文件格式化(最常用)
    • 前端:HTML, CSS, JavaScript/TypeScript, JSON, Markdown
    • 后端:Python, Go, Java, C++, SQL
  2. 数据文件格式化
    • 表格数据:CSV, Excel (.xlsx, .xls)
    • 配置文件:YAML, TOML, INI
    • 日志文件:统一时间戳、对齐列
  3. 文本文件格式化
    • JSON/XML 缩进美化/压缩
    • Markdown 表格对齐
    • 去除多余空格、统一换行符
  4. 图片/视频元数据格式化(较少见但实用)

    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"

高级技巧与建议

  1. 先备份:批量操作前务必先备份,或将脚本设计为生成新文件(如 .formatted),安全第一。
  2. 幂等性:好的格式化脚本应该是幂等的——多次运行结果一致。
  3. 版本控制配合:在 Git 中使用 pre-commit 钩子,提交前自动格式化。
  4. 并行处理:如果文件很多,使用 xargs -P 或 GNU parallel 可以大幅提速。
  5. 只格式化变更的文件:结合 git diff --name-only 可以只处理改动过的文件,效率更高。

最后:只要你能定义一个明确的“格式化规则”,无论多复杂(正则替换、对齐、重命名列等),都可以写成脚本批量执行,这比手动操作要可靠得多。

抱歉,评论功能暂时关闭!