AI Project Context Generator
AI Project Context Generator (getfiles.sh)
好用的Ai仅在网页版或者api能用,vscode上的插件又要钱,稍微大点的项目就一堆文件,一个个上传给ai嫌手疼,故让Gemini写了个
项目GitHub:https://github.com/butlanys/getfiles
1 | curl https://raw.githubusercontent.com/butlanys/getfiles/main/getfiles.sh | bash |
一个简单的 Bash 脚本,用于快速生成项目结构和选定文件内容的概览,旨在作为上下文提供给大型语言模型(LLM)或 AI 助手。
它会自动:
- 生成目录树(如果
tree命令可用)。 - 抓取项目中的文件内容。
- 根据
.gitignore文件排除文件和目录(需要git命令和在 Git 仓库中运行)。 - 允许你定义额外的自定义排除模式。
- 允许你指定只包含特定文件后缀的文件。
- 将生成的上下文保存到一个带有时间戳的文本文件中 (
ai_prompt_YYYYMMDD_HHMMSS.txt)。
这对于向 AI 提供关于代码库的全面信息,以便进行调试、代码生成、文档编写或一般性分析非常有用,而无需手动复制粘贴大量文件。
✨ 功能特性
- 目录树视图: 使用
tree命令(如果已安装)可视化项目结构。 - 文件内容包含: 自动读取并包含项目中文件的内容。
- .gitignore 感知: 智能地排除 Git 配置中忽略的文件和目录(依赖
git)。 - 自定义排除: 通过编辑脚本顶部的
CUSTOM_EXCLUDE_PATTERNS数组来添加你自己的排除规则(例如,*.log,dist/)。 - 后缀过滤: 通过编辑
INCLUDE_SUFFIXES数组来选择只包含特定文件类型(例如,py,js,md)。 - 自我忽略: 脚本本身 (
getfiles.sh) 和.git目录总是被排除。 - 自动保存: 将输出直接保存到带有日期和时间戳的文件中,方便管理。
- 回退机制: 如果
git或tree命令不可用,脚本会尝试使用find命令,并打印警告。
🚀 为什么使用这个脚本?
- 节省时间: 无需手动浏览和复制粘贴多个文件。
- 提供完整上下文: 帮助 AI 更好地理解项目结构和代码依赖关系。
- 结构化输出: 生成的提示词具有清晰的结构(目录树、文件内容)。
- 可配置: 轻松调整排除项和包含的文件类型。
🛠️ 先决条件
- Bash: 脚本是用 Bash 编写的,大多数 Linux、macOS 和 Windows (通过 WSL 或 Git Bash) 系统都自带。
git(强烈推荐): 为了准确地遵循.gitignore规则,需要安装git并且脚本应在 Git 仓库的根目录运行。tree(可选但推荐): 为了获得更美观的目录树视图。如果未安装,脚本会使用find命令作为替代,并显示警告。- 在 Debian/Ubuntu 上:
sudo apt update && sudo apt install tree git - 在 macOS 上 (使用 Homebrew):
brew install tree git - 在 Fedora 上:
sudo dnf install tree git
- 在 Debian/Ubuntu 上:
⚙️ 安装
- 获取脚本:
- 克隆仓库:
git clone <your-repo-url> - 或者,直接下载
getfiles.sh文件到你的项目根目录。
- 克隆仓库:
- 授予执行权限: 在你的项目根目录打开终端,运行:
1
chmod +x getfiles.sh
📝 使用方法
- 导航到项目: 在终端中,
cd进入你的项目根目录。 - (可选) 配置: 如果需要,编辑
getfiles.sh文件顶部的CUSTOM_EXCLUDE_PATTERNS和INCLUDE_SUFFIXES数组。1
2
3
4
5
6
7
8# 示例: 排除所有 .log 文件和 build 目录
CUSTOM_EXCLUDE_PATTERNS=("*.log" "build/")
# 示例: 只包含 Python 和 Markdown 文件
INCLUDE_SUFFIXES=("py" "md")
# 如果 INCLUDE_SUFFIXES 为空数组,则包含所有未被排除的文件
# INCLUDE_SUFFIXES=() - 运行脚本:
1
./getfiles.sh
- 检查输出: 脚本将在终端显示一些信息,并将完整的 AI 提示词保存到一个名为
ai_prompt_YYYYMMDD_HHMMSS.txt的文件中(例如ai_prompt_20250410_103600.txt)。 - 提供给 AI: 打开生成的
.txt文件,复制其全部内容,然后粘贴到你的 AI 对话框中作为上下文或提示。
📄 输出结构
生成的 ai_prompt_*.txt 文件大致包含以下部分:
- 引导语: 说明内容的性质和应用的排除规则。
- 项目结构 (目录树): 使用
tree或find生成的目录列表。 - 文件内容:
- 对于每个包含的文件:
- 文件路径标识 (
--- 文件路径: path/to/your/file ---) - 文件内容本身
- 分隔符 (
--------------------------------------------------)
- 文件路径标识 (
- 对于每个包含的文件:
- 结束语: 标记上下文结束。
⚠️ 限制
- 自定义排除模式:
CUSTOM_EXCLUDE_PATTERNS使用简单的grep模式匹配,可能不如.gitignore的语法强大或精确。它主要用于过滤git ls-files或find返回的路径字符串。 find回退: 如果git不可用,使用find命令获取文件列表可能无法完全准确地遵循.gitignore的所有规则(特别是复杂的否定模式等)。- 二进制文件: 脚本会尝试读取所有符合条件的文件。对于大型二进制文件,这可能会导致输出非常大或包含乱码。可以考虑使用
CUSTOM_EXCLUDE_PATTERNS或INCLUDE_SUFFIXES来避免这种情况。
🤝 贡献
欢迎提出问题 (Issues) 和拉取请求 (Pull Requests)。如果你有改进脚本的想法或发现了 Bug,请随时贡献!
📜 许可证
本项目采用 MIT 许可证。 (你需要创建一个名为 LICENSE 的文件并将 MIT 许可证文本放入其中)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 butlanys的博客!
评论
WalineGiscus