mcpField
F
filesystem

filesystem

github.com/mathews-tomAgent 工作流339161 次安装1 天前更新
代码仓库

关于 filesystem

面向 Claude Code 的文件系统操作技能,说明如何用内置工具读取、编辑、搜索和管理文件,并替代相应的文件系统 MCP 工具。

主要功能

  1. 01使用 Read 分段读取文件
  2. 02并行读取多个文件
  3. 03用 Edit 精确修改内容
  4. 04通过 Glob 和 Grep 查找文件
  5. 05使用 Bash 执行文件管理操作

适用场景

  1. 01浏览大型代码库
  2. 02批量搜索并修改代码
  3. 03创建、移动或删除文件
  4. 04检查文件元数据

MCP 相关

该技能不需要 MCP 服务,而是用 Claude Code 内置工具替代文件系统 MCP 工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mathews-tom/armory --skill filesystem

安装后在 Claude Code 中输入/filesystem确认已加载。

附带文件evals/cases.yaml

详细介绍

文件系统

所有文件和目录操作都使用 Claude Code 内置工具。无需 MCP 服务——原生工具速度更快、功能更强,而且空闲时不消耗上下文令牌。

快速参考

文件系统 MCP 工具替代方案说明
read_file(path)Read 工具支持行偏移量和读取行数限制
read_multiple_files(paths)多个并行 Read 调用比顺序执行 MCP 调用更快
write_file(path, content)Write 工具覆盖整个文件
edit_file(path, edits)Edit 工具精确替换字符串;可精细修改
list_directory(path)Glob 或 Bash lsGlob 用于匹配模式,ls 用于简单列出
directory_tree(path)Bash fd 或 Glob **/*fd 速度最快;Glob 用于按模式筛选
search_files(pattern, path)Grep 工具完整正则表达式、文件类型筛选、上下文行
create_directory(path)Bash mkdir -p-p 会创建中间目录
move_file(src, dst)Bash mv也可用于重命名
get_file_info(path)Bash stat 或 Bash ls -la大小、权限、时间戳
list_allowed_directories不适用Claude Code 在工作目录中运行;不受沙盒限制

读取文件

读取单个文件

使用 Read 工具并提供绝对路径:

Read: /path/to/file.py

对于大型文件,可使用偏移量和读取行数限制来读取特定部分:

Read: /path/to/file.py (offset: 100, limit: 50)

这会从第 100 行开始读取 50 行。对于有数千行的文件,可使用此方法避免上下文被大量内容占满。

并行读取多个文件

在单次响应中发起多个 Read 调用。Claude Code 会并发执行这些调用:

Read: /path/to/file1.py
Read: /path/to/file2.py
Read: /path/to/file3.py

并行读取比 MCP 的 read_multiple_files 更快,后者内部采用串行处理。

读取图像和 PDF

Read 工具支持二进制格式:

  • 图像(PNG、JPG、SVG):以可视化方式显示
  • PDF:提取文本;对于较大的文档,可使用 pages: "1-5"(每次调用最多 20 页)

写入和编辑文件

写入新文件

使用 Write 工具创建文件或覆盖现有文件:

Write: /path/to/new-file.py
Content: <full file content>

如果文件已存在,使用 Write 工具前必须先读取该文件。对于新文件,可直接写入。

编辑现有文件

使用 Edit 工具进行精细修改——替换完全匹配的字符串:

Edit: /path/to/file.py
old_string: "def old_function():"
new_string: "def new_function():"

如果 old_string 在文件中不唯一,Edit 工具会失败。请提供足够的周边上下文以确保匹配唯一,或使用 replace_all: true 在整个文件中查找并替换。

对于现有文件,优先使用 Edit 而非 Write。Edit 会保留修改区域之外的所有内容,并显示清晰的差异。Write 会替换整个文件。


查找文件

按名称模式查找(Glob)
Glob: **/*.py           → all Python files recursively
Glob: src/**/*.ts       → TypeScript files under src/
Glob: *.md              → Markdown files in current directory
Glob: **/test_*.py      → test files anywhere in the tree

结果按修改时间排序(最新的排在最前)。

按内容搜索(Grep)
Grep: pattern="def process_data" type="py"
Grep: pattern="TODO|FIXME" glob="*.py"
Grep: pattern="class.*Controller" output_mode="content" -C=2
Grep 参数用途
pattern要匹配的正则表达式
type文件类型筛选(py、js、ts、rust、go 等)
globGlob 模式筛选(*.tsx、src/**/*.py)
output_modefiles_with_matches(默认)、content、count
-C、-A、-B上下文行:匹配项周围、之后、之前
-i不区分大小写的搜索
列出目录

简单列表:

ls -la /path/to/directory

使用 fd 递归显示目录树:

fd . /path/to/directory --type f

限制深度的目录树:

fd . /path/to/directory --type f --max-depth 2

按扩展名筛选:

fd -e py /path/to/directory

文件操作

创建目录
mkdir -p /path/to/new/directory

-p 标志会创建所有中间目录。请先使用 ls 确认父路径存在。

移动/重命名
mv /path/to/source.py /path/to/destination.py

重命名文件(同一目录):

mv /path/to/old-name.py /path/to/new-name.py

移动目录:

mv /path/to/source-dir /path/to/destination-dir
复制
cp /path/to/source.py /path/to/destination.py
cp -r /path/to/source-dir /path/to/destination-dir
删除
rm /path/to/file.py
rm -r /path/to/directory

删除文件或目录前,务必先向用户确认。

文件元数据
stat /path/to/file.py
ls -la /path/to/file.py
wc -l /path/to/file.py
命令返回内容
stat大小、权限、时间戳、inode
ls -la权限、所有者、大小、修改日期
wc -l行数
fileMIME 类型检测

常见工作流

跨文件查找和替换
# Find all files containing the old string
Grep: pattern="old_function_name" type="py" output_mode="files_with_matches"

# Then Edit each file
Edit: /path/to/file1.py (old_string → new_string, replace_all: true)
Edit: /path/to/file2.py (old_string → new_string, replace_all: true)
探索不熟悉的代码库
  1. 检查项目结构:fd . --type f --max-depth 2
  2. 阅读配置:Read: package.json 或 Read: pyproject.toml
  3. 查找入口点:Grep: pattern="def main|if __name__" type="py"
  4. 阅读上面找到的关键文件
查找大文件
fd --type f --exec stat -f '%z %N' {} \; | sort -rn | head -20

错误处理

错误原因解决方法
Read: 找不到文件路径不正确或文件已删除使用 ls 或 Glob 验证
Edit: old_string 不唯一文件中有多个匹配项添加更多周边上下文,使其唯一
Edit: 找不到 old_string内容自上次读取后发生了变化重新读取文件,然后使用当前内容重试
Write: 尚未读取文件尝试覆盖文件,但未先读取先读取文件,然后再 Write
权限被拒绝OS 权限不足使用 ls -la 检查;必要时使用 chmod
Glob: 未找到文件模式限制过严放宽模式;检查路径拼写

限制

  • Read 默认最多返回 2000 行。对于更大的文件,请使用 offset/limit。
  • Read 会截断超过 2000 个字符的行。
  • Edit 要求精确匹配字符串——空格和缩进必须完全一致。
  • Write 会覆盖整个文件。不支持追加模式。要追加内容,请先读取文件,然后写入合并后的内容。
  • Glob 只匹配文件,不匹配目录。使用 Bash ls 或 fd 列出目录。
  • PDF 阅读 每次调用最多处理 20 页。对于较大的文档,请指定页码范围。

校准规则

  1. 先读后编辑。 编辑文件前始终先读取文件。Edit 工具会强制执行此规则。
  2. 已有文件优先使用 Edit,而不是 Write。 Edit 可精确修改并显示差异。Write 会完整替换文件——仅用于新文件或完全重写。
  3. 搜索文件时优先使用 Glob,而不是 Bash。 Glob 针对模式匹配进行了优化。只有当查询条件无法用 Glob 表达时(如大小筛选、日期筛选),才退而使用 fd 或 find。
  4. 搜索内容时优先使用 Grep,而不是 Bash。 Grep 针对基于 ripgrep 的搜索进行了优化,并具备适当的权限。切勿通过 Bash 使用 grep 或 rg。
  5. 并行读取多个文件。 在同一条响应中发出所有 Read 调用,以便并发执行。
  6. 始终使用绝对路径。 Claude Code 工具要求使用绝对路径。切勿向 Read、Write 或 Edit 传入相对路径。

评论

支持 Markdown