copyfiles-cli


Namecopyfiles-cli JSON
Version 0.1.6 PyPI version JSON
download
home_pageNone
SummaryGenerate a copyfiles.txt containing project tree + file contents.
upload_time2025-08-01 23:07:40
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords llm context project-tree cli
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # copyfiles-cli

**copyfiles-cli** is a small but mighty CLI that scans a project directory, filters out junk via `.gitignore`-style rules, and spits out a single **`copyfiles.txt`** containing:

1.  _Project tree_ – an indented outline of kept files and folders.
2.  _File contents_ – each retained file wrapped in a language-tagged code fence.

It’s perfect for piping an entire repo into an LLM prompt or sharing a compact “snapshot” of code with teammates.

---

## Features

| Feature                      | What it does                                                                             |
| ---------------------------- | ---------------------------------------------------------------------------------------- |
| **Smart filtering**          | Honors your project’s `.gitignore`, plus optional extra ignore file (`--config`).        |
| **Size guards & truncation** | Skip very large files (`--skip-large`) or keep only the first _N_ bytes (`--max-bytes`). |
| **Colorful, pretty CLI**     | Rich / Colorama styling with automatic NO_COLOR detection.                               |
| **Zero-config defaults**     | Run `copyfiles` in any repo and get a sane `copyfiles.txt` instantly.                    |

---

## Installation

```bash
# Recommended: inside a virtualenv
pip install copyfiles-cli           # from PyPI
# or, for local development
git clone https://github.com/yourname/copyfiles
cd copyfiles
pip install -e '.[dev]'         # installs package + test/QA deps
```

> **Requires** Python 3.8+

---

## Quick Start

```bash
# From your project root
copyfiles

# Generates ./copyfiles.txt:
# ├── app.py
# ├── module/
# │   └── __init__.py
# └── README.md
```

Open `copyfiles.txt` in any editor or paste it directly into ChatGPT / Gemini – you’ll see an ASCII tree followed by each file’s contents inside code fences.

---

## Advanced CLI Flags

| Flag              | Default         | Purpose                                                            |
| ----------------- | --------------- | ------------------------------------------------------------------ |
| `--root PATH`     | `.`             | Directory to scan.                                                 |
| `--out FILE`      | `copyfiles.txt` | Output file name/path.                                             |
| `--config FILE`   | _none_          | Extra ignore patterns (one per line, same syntax as `.gitignore`). |
| `--max-bytes N`   | `100 000`       | Truncate individual files to the first _N_ bytes.                  |
| `--skip-large KB` | _off_           | Skip files **larger than** _KB_ kilobytes entirely.                |
| `-v / --verbose`  | off             | Show scanning / filtering progress.                                |
| `--no-color`      | off             | Force plain-text output (useful in CI).                            |
| `-V / --version`  | –               | Print version and exit.                                            |
| `--help`          | –               | Full help text with examples.                                      |

---

## Contributing

1. **Fork** & clone the repo.
2. Create a virtualenv and install dev deps:

   ```bash
   python -m venv .venv && source .venv/bin/activate
   pip install -e '.[dev]'
   ```

3. Run the _entire_ QA suite before submitting a PR:

   ```bash
   pytest          # unit + CLI tests
   tox -p auto     # multi-python matrix + lint
   ruff check src tests  # additional lint if you like
   ```

4. Commit using conventional commits (`feat: …`, `fix: …`, etc.) and open a pull request – GitHub Actions will run the same tox matrix.

### Project Layout

```
src/copyfiles/       # library & CLI
tests/               # unit and CLI tests + fixtures
README.md
pyproject.toml
tox.ini
```

---

## Licence

MIT – see `LICENSE` file for full text.

---

> Made with ☕, 🐍, and a sprinkle of Rich ANSI sparkle.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "copyfiles-cli",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "llm, context, project-tree, cli",
    "author": null,
    "author_email": "Bethvour <bethvourc@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/90/ca/c27dd94ccbf3a80600526d5daafa0b2a2f5dba5dee9de28d1d45dad36b6a/copyfiles_cli-0.1.6.tar.gz",
    "platform": null,
    "description": "# copyfiles-cli\n\n**copyfiles-cli** is a small but mighty CLI that scans a project directory, filters out junk via `.gitignore`-style rules, and spits out a single **`copyfiles.txt`** containing:\n\n1.  _Project tree_ \u2013 an indented outline of kept files and folders.\n2.  _File contents_ \u2013 each retained file wrapped in a language-tagged code fence.\n\nIt\u2019s perfect for piping an entire repo into an LLM prompt or sharing a compact \u201csnapshot\u201d of code with teammates.\n\n---\n\n## Features\n\n| Feature                      | What it does                                                                             |\n| ---------------------------- | ---------------------------------------------------------------------------------------- |\n| **Smart filtering**          | Honors your project\u2019s `.gitignore`, plus optional extra ignore file (`--config`).        |\n| **Size guards & truncation** | Skip very large files (`--skip-large`) or keep only the first _N_ bytes (`--max-bytes`). |\n| **Colorful, pretty CLI**     | Rich / Colorama styling with automatic NO_COLOR detection.                               |\n| **Zero-config defaults**     | Run `copyfiles` in any repo and get a sane `copyfiles.txt` instantly.                    |\n\n---\n\n## Installation\n\n```bash\n# Recommended: inside a virtualenv\npip install copyfiles-cli           # from PyPI\n# or, for local development\ngit clone https://github.com/yourname/copyfiles\ncd copyfiles\npip install -e '.[dev]'         # installs package + test/QA deps\n```\n\n> **Requires** Python 3.8+\n\n---\n\n## Quick Start\n\n```bash\n# From your project root\ncopyfiles\n\n# Generates ./copyfiles.txt:\n# \u251c\u2500\u2500 app.py\n# \u251c\u2500\u2500 module/\n# \u2502   \u2514\u2500\u2500 __init__.py\n# \u2514\u2500\u2500 README.md\n```\n\nOpen `copyfiles.txt` in any editor or paste it directly into ChatGPT / Gemini \u2013 you\u2019ll see an ASCII tree followed by each file\u2019s contents inside code fences.\n\n---\n\n## Advanced CLI Flags\n\n| Flag              | Default         | Purpose                                                            |\n| ----------------- | --------------- | ------------------------------------------------------------------ |\n| `--root PATH`     | `.`             | Directory to scan.                                                 |\n| `--out FILE`      | `copyfiles.txt` | Output file name/path.                                             |\n| `--config FILE`   | _none_          | Extra ignore patterns (one per line, same syntax as `.gitignore`). |\n| `--max-bytes N`   | `100 000`       | Truncate individual files to the first _N_ bytes.                  |\n| `--skip-large KB` | _off_           | Skip files **larger than** _KB_ kilobytes entirely.                |\n| `-v / --verbose`  | off             | Show scanning / filtering progress.                                |\n| `--no-color`      | off             | Force plain-text output (useful in CI).                            |\n| `-V / --version`  | \u2013               | Print version and exit.                                            |\n| `--help`          | \u2013               | Full help text with examples.                                      |\n\n---\n\n## Contributing\n\n1. **Fork** & clone the repo.\n2. Create a virtualenv and install dev deps:\n\n   ```bash\n   python -m venv .venv && source .venv/bin/activate\n   pip install -e '.[dev]'\n   ```\n\n3. Run the _entire_ QA suite before submitting a PR:\n\n   ```bash\n   pytest          # unit + CLI tests\n   tox -p auto     # multi-python matrix + lint\n   ruff check src tests  # additional lint if you like\n   ```\n\n4. Commit using conventional commits (`feat: \u2026`, `fix: \u2026`, etc.) and open a pull request \u2013 GitHub Actions will run the same tox matrix.\n\n### Project Layout\n\n```\nsrc/copyfiles/       # library & CLI\ntests/               # unit and CLI tests + fixtures\nREADME.md\npyproject.toml\ntox.ini\n```\n\n---\n\n## Licence\n\nMIT \u2013 see `LICENSE` file for full text.\n\n---\n\n> Made with \u2615, \ud83d\udc0d, and a sprinkle of Rich ANSI sparkle.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Generate a copyfiles.txt containing project tree + file contents.",
    "version": "0.1.6",
    "project_urls": {
        "Changelog": "https://github.com/bethvourc/copyf/releases",
        "Documentation": "https://github.com/bethvourc/copyf#readme",
        "Homepage": "https://github.com/bethvourc/copyf"
    },
    "split_keywords": [
        "llm",
        " context",
        " project-tree",
        " cli"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ddd38750b0e9522c375376c71a68f62d1b3e41e63147a9f7f81463c5ceeba7ef",
                "md5": "600df5900c1baf5798a8ed976a2c8a18",
                "sha256": "e9c73de7755c7602eb24196b966080ca4ac6cf399a4fcc454cc2727789f5fb02"
            },
            "downloads": -1,
            "filename": "copyfiles_cli-0.1.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "600df5900c1baf5798a8ed976a2c8a18",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 9178,
            "upload_time": "2025-08-01T23:07:39",
            "upload_time_iso_8601": "2025-08-01T23:07:39.520880Z",
            "url": "https://files.pythonhosted.org/packages/dd/d3/8750b0e9522c375376c71a68f62d1b3e41e63147a9f7f81463c5ceeba7ef/copyfiles_cli-0.1.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "90cac27dd94ccbf3a80600526d5daafa0b2a2f5dba5dee9de28d1d45dad36b6a",
                "md5": "6639e9b66c2acedf23cd800a7c077d08",
                "sha256": "58b63d320e52ab796e62137596295f3a2d1a4a85336c13b502ebd31c5450bccf"
            },
            "downloads": -1,
            "filename": "copyfiles_cli-0.1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "6639e9b66c2acedf23cd800a7c077d08",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 11185,
            "upload_time": "2025-08-01T23:07:40",
            "upload_time_iso_8601": "2025-08-01T23:07:40.607763Z",
            "url": "https://files.pythonhosted.org/packages/90/ca/c27dd94ccbf3a80600526d5daafa0b2a2f5dba5dee9de28d1d45dad36b6a/copyfiles_cli-0.1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 23:07:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bethvourc",
    "github_project": "copyf",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "copyfiles-cli"
}
        
Elapsed time: 1.63470s