gregpriday / copy-tree
将目录及其文件复制到您的剪贴板。
Requires
- php: ^8.2
- ext-fileinfo: *
- illuminate/support: ^11.15
- symfony/console: ^6.0|^7.0
- symfony/finder: ^7.1
- symfony/process: ^6.0|^7.0
Requires (Dev)
- laravel/laravel: ^11.15
- laravel/pint: ^1.0
- phpunit/phpunit: ^10.5
- spatie/ray: ^1.28
- symfony/phpunit-bridge: ^6.0|^7.0
README
这个命令行工具允许您将目录的整个结构(包括文件内容)复制到您的剪贴板。这对于快速以可读格式(如代码审查或协作调试会话期间)共享文件内容和结构非常有用。
功能
- 将目录结构和文件内容复制到剪贴板,可直接粘贴到聊天机器人,如 Claude 或 ChatGPT。
- 灵活的规则集系统,用于包含/排除文件。
- 支持针对项目不同部分的多个规则集。
- 支持自定义、预定义和自动检测的规则集。
- 输出到剪贴板、控制台或文件。
- 跨平台支持(Linux、macOS、Windows)。
快速开始
安装后,您可以将当前目录结构快速复制到剪贴板
ctree
您可以使用以下命令获取命令帮助
ctree --help
如果您在Laravel或SvelteKit项目中,自动规则将自动工作。否则,您需要指定自定义规则集。
文档
有关使用Ctree的更多详细信息,请参阅以下文档
有关规则集系统的快速概述,请参阅下面的规则集系统部分。
先决条件
在安装和使用 copy-tree
之前,请确保您的系统已安装必要的剪贴板工具
- Linux:安装
xclip
,该工具用于访问剪贴板。sudo apt-get update && sudo apt-get install -y xclip
- macOS:macOS 预装了
pbcopy
,因此无需额外安装。 - Windows:Windows 默认提供了
clip
命令,因此无需额外安装。
安装
您可以通过 Composer 安装此包
composer require gregpriday/copy-tree
用法
安装后,您可以直接从终端运行 ctree
命令。以下是使用此命令的方法
# Display the help information ctree --help # Copy current directory to clipboard ctree # Specify a directory path ctree /path/to/directory # Display the output in the console ctree --display # Output to a file instead of clipboard ctree --output=output.txt # Use a specific ruleset ctree --ruleset=laravel # Include only the directory tree in the output, not the file contents ctree --only-tree # Filter files using a glob pattern on the relative path ctree --filter="*.php"
命令参数和选项
path
:可选的目录路径以复制。如果未指定,则使用当前工作目录。--depth
,-d
:可选的树的最大深度。默认为 10。--output
,-o
:将输出到文件而不是剪贴板。--display
,-i
:在控制台显示输出。--ruleset
,-r
:要应用的规则集。可用选项包括 'auto'、'laravel'、'sveltekit' 和任何自定义规则集。默认为 'auto'。--only-tree
,-t
:仅包含输出中的目录树,不包括文件内容。--filter
,-f
:使用glob模式在相对路径上过滤文件。
全局安装和使用
使用Composer全局安装copy-tree
,以便在任何终端位置使用ctree
命令
composer global require gregpriday/copy-tree
运行相同的命令以升级到最新版本。
确保Composer全局bin目录包含在您的PATH
中。通常,对于Unix系统,这是~/.composer/vendor/bin
或~/.config/composer/vendor/bin
。将其添加到您的.bashrc
或.zshrc
export PATH="$PATH:$HOME/.composer/vendor/bin"
重新加载您的配置
source ~/.bashrc # Or, if using zsh source ~/.zshrc
现在,您可以从任何目录使用ctree
# Copy the current directory to the clipboard ctree # Copy with specific depth and display output ctree /path/to/directory --depth=2 --display
规则集系统
Ctree使用灵活的规则集系统来确定包含或排除哪些文件和目录。规则集系统按以下顺序工作
- 当前目录中的自定义规则集
- 预定义规则集
- 自动检测
- 默认规则集
有关示例,请参阅Laravel规则集。
有关编写规则集的完整指南,请参阅编写规则集文档。
有关各种项目类型规则集的示例,请参阅我们的规则集示例。
规则集格式
规则集以JSON格式定义。以下是结构的概述
{ "rules": [ [ ["field", "operator", "value"], ["field", "operator", "value"] ] ], "globalExcludeRules": [ ["field", "operator", "value"] ], "always": { "include": ["file1", "file2"], "exclude": ["file3", "file4"] } }
rules
:规则集数组。每个规则集都是一个规则数组,所有规则都必须为true才能包含文件。globalExcludeRules
:一个规则数组,如果其中任何规则为true,则将排除文件。always
:指定始终包含或排除的文件,不受其他规则的影响。
字段
可用的字段包括
folder
,path
,dirname
,basename
,extension
,filename
,contents
,contents_slice
,size
,mtime
,mimeType
运算符
可用的运算符包括
>
,>=
,<
,<=
,=
,!=
,oneOf
,regex
,glob
,fnmatch
,contains
,startsWith
,endsWith
,length
,isAscii
,isJson
,isUlid
,isUrl
,isUuid
有关规则集架构的完整参考,请参阅项目存储库中的schema.json
文件。
所有运算符都可以通过在其前面加'not'来取反,例如notOneOf
,notRegex
,notStartsWith
。这允许创建更灵活的排除规则。
自定义规则集
您可以在项目目录中创建一个名为/.ctree/ruleset.json
的自定义规则集文件。如果此文件存在,则将使用它而不是任何预定义或默认规则集。
您还可以在/.ctree/example.json
中创建命名规则集,它将用于ctree -r example
。
多个规则集
Ctree支持在单个项目中使用多个规则集,允许您选择性地共享代码库的不同部分。这对于具有不同部分或模块的大型项目特别有用。
要使用多个规则集
- 在项目的
/.ctree
目录中为每个规则集创建单独的JSON文件。 - 根据所需的规则集名称命名每个文件(例如,
/.ctree/frontend.json
,/.ctree/backend.json
)。 - 使用
--ruleset
或-r
选项指定要应用的规则集
ctree --ruleset frontend ctree --ruleset backend
此功能使您能够轻松地共享项目的特定部分,例如仅前端代码或仅后端代码,而无需每次都修改规则集。
有关使用多个规则集的更详细信息,请参阅使用多个规则集文档。
预定义规则集
Ctree为常见项目类型提供了预定义规则集。使用方法如下
ctree --ruleset laravel # Uses the predefined Laravel ruleset ctree --ruleset sveltekit # Uses the predefined SvelteKit ruleset
自动检测
如果没有指定规则集,Ctree 将尝试自动检测项目类型并使用适当的规则集
ctree # Auto-detects project type and uses the most suitable ruleset
默认规则集
如果找不到自定义规则集,未指定预定义规则集,并且自动检测失败,Ctree 将使用默认规则集。
故障排除
如果您遇到剪贴板功能问题
- Linux:确保已安装并运行
xclip
。 - macOS:如果您遇到权限错误,请尝试用
sudo
运行命令。 - Windows:如果您遇到权限问题,请确保以管理员身份运行命令提示符。
如果输出被截断,请尝试使用 --output
选项将输出保存到文件,而不是复制到剪贴板。
贡献
欢迎贡献!以下是您可以如何贡献的方法
- Fork 仓库
- 创建一个新的分支(
git checkout -b feature/amazing-feature
) - 进行更改
- 提交更改(
git commit -m '添加一些惊人的功能'
) - 推送到分支(
git push origin feature/amazing-feature
) - 打开 Pull Request
请确保根据需要更新测试。有关更多详细信息,请参阅CONTRIBUTING 文件。
测试
使用以下命令运行测试
composer test
变更日志
有关最近更改的详细信息,请参阅CHANGELOG。
安全性
如果您发现任何安全相关的问题,请通过电子邮件greg@siteorigin.com 报告,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件。