fylex


Namefylex JSON
Version 1.0.2 PyPI version JSON
download
home_pageNone
SummaryFylex: A production-ready, high-performance file utility tailored for Linux — with smart copy/move, hashing, filters, undo/redo, and conflict resolution.
upload_time2025-09-19 00:36:41
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords file copy move cli linux utility xxhash blake3 filter conflict backup undo redo hashing checksum deduplication data-integrity file-management sync devtool cli-tool python-tool smart-copy smart-move fylex
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Fylex: The Linux File Ninja

[![PyPI](https://img.shields.io/pypi/v/fylex.svg)](https://pypi.org/project/fylex/)
[![Python 3.x](https://img.shields.io/badge/Python-3.x-blue.svg)](https://www.python.org/)
[![PyPI Downloads](https://static.pepy.tech/personalized-badge/fylex?period=total\&units=INTERNATIONAL_SYSTEM\&left_color=black\&right_color=green\&left_text=downloads)](https://pepy.tech/projects/fylex)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

[![20250918-2144-Tech-Neon-Design-simple-compose-01k5esk4tqf54rf0vh67m2ph4h.png](https://i.postimg.cc/L6F6V78T/20250918-2144-Tech-Neon-Design-simple-compose-01k5esk4tqf54rf0vh67m2ph4h.png)](https://postimg.cc/WtSvN5rF)

**Fylex** is a **production-ready, Linux-tailored file management tool** that combines the best of
`rsync`, `cp`, and Python’s `shutil` — but goes **beyond** with:

*  **Smart Copy & Move** with hashing (xxhash, blake3, SHA, MD5)
*  **Advanced conflict resolution** (rename, skip, replace, larger/smaller, newer/older, prompt)
*  **Filters**: regex, glob, exact filename matches, inclusion/exclusion
*  **Safety nets**: undo, redo, backup of deprecated files
*  **Data integrity**: hash verification, SQLite-backed hash cache for deduplication
*  **Metadata preservation**: permissions, timestamps, xattrs, ACLs (Linux-specific)
*  **CLI & Python API** for flexible usage


##
### Feature comparison  

| Feature / Tool                  | Fylex | cp (coreutils) | rsync | shutil (Python stdlib) |
|---------------------------------|-------|----------------|-------|-------------------------|
| Primary purpose                 | Smart local copy/move with safety nets | Basic copy | Fast sync (local/remote) | Library-level file ops |
| Undo / Redo                     | Yes — built-in JSON journaling | No | No | No |
| Hash verification               | Yes — xxhash, blake3, sha256, etc. | No | Partial — checksums optional | No |
| Hash cache (SQLite)             | Yes — avoids rehashing unchanged files | No | No | No |
| Duplicate detection (dest)      | Yes — size + hash | No | Partial — based on size/checksums | No |
| Conflict resolution             | Extensive — rename, replace, skip, newer/older, larger/smaller, prompt | None — overwrite only | Limited — flags like `--backup`, `--suffix` | None |
| Metadata preservation           | Yes — mtime, perms, xattrs, ACLs on Linux | Partial — `-a` preserves many | Partial — `-a` preserves many | Partial — `copystat` only |
| Atomic writes                   | Yes — via `fylex.tmp` | No | Partial — temp options exist | No |
| Logging / audit trail           | Yes — JSON logs per process | No | Partial — verbose logs only | No |
| CLI + Python API                | Yes — both | CLI only | CLI only (bindings exist) | Python API only |
| Delta transfer (network)        | No — local only | No | Yes | No |
| Remote / cloud support          | No — local-first | No | Yes — ssh/rsyncd | No |
| Cross-platform                  | Partial — Linux-first (xattrs/ACL best) | Yes | Yes | Yes |
| Performance (local)             | Very good — uses `copy_file_range` / `sendfile` | Good | Very good — efficient I/O | Moderate |
| Learning curve                  | Moderate — many options | Very low | Moderate to high — many options | Low |
| Best fit                        | Local integrity-critical workflows, reversible ops | Quick one-off copies | Local/remote sync and bandwidth-efficient backups | Small Python scripts |

---

## Honest strengths (where Fylex shines)

* **Undo / Redo** — Most competitors don’t offer a built-in reversible operation for arbitrary copy/move workflows. This is a major safety feature for power users.
* **JSON audit trail** — Every process writes machine-readable logs that enable reproducibility and automation (and fuel the undo/redo).
* **Hash verification + hash cache** — Optional verification plus an on-disk SQLite cache avoids repeated hashing of unchanged files and speeds repeated operations.
* **Flexible conflict resolution** — Many realistic conflict policies (rename with suffix, replace, choose larger/newer, prompt) are available out-of-the-box.
* **Linux metadata handling** — Attempts to preserve xattrs/ACLs when system tools are available—valuable for server or system admin workflows.
* **Atomic writes & backups** — Writes to a `.tmp` area and moves replaced files to `fylex.deprecated/PROCESS_ID` to avoid data loss during partial operations.
* **Good local performance** — Uses `copy_file_range` or `sendfile` and falls back sensibly for portability.

## Honest limitations (where other tools are better)

* **Not a network delta-sync tool** — If you need efficient remote sync over low bandwidth, `rsync` or `rclone` is better (rsync implements delta transfer).
* **Not a full backup system** — For encrypted, deduplicated backups with retention/versioning, choose `borg`/`restic`.
* **Linux-first** — Windows/macOS will work for basic operations, but xattr/ACL preservation and some system calls are Linux-specific; Fylex is intentionally optimized for Linux environments.
* **No built-in remote cloud backends** — If you need native S3/GoogleDrive/OneDrive support, `rclone` is the tool of choice.
* **Single-process / scale** — Current design favors correctness and simplicity; large-scale parallel distributed copying may require additional engineering (e.g., a distributed worker model).
* **Delta-copy library replacement** — You mentioned earlier replacing `pyrsync2` with a custom mechanism; Fylex does **not** implement network delta transfers (it focuses on local efficiency and correctness).

##




##  Safety Nets: Reliability First

Fylex is built with **data safety as priority**:

*  **Undo**: Rollback the last copy/move operation (removes created files, restores moved ones).
*  **Redo**: Replay an operation exactly as before.
*  **Backups**: Replaced/conflicting files are moved into `fylex.deprecated/` (per process).
*  **JSON logs**: Every operation is journaled (`json/{process_id}.json` + `.jsonl`).
*  **Verification**: Optional hash verification ensures copy integrity.
*  **Retries**: Up to 5 retries (`MAX_RETRIES`) on hash mismatch.
*  **Protections**: Prevents overwriting itself, copying into subdirectories, or backup loops.

##

## Installation

```bash
pip install fylex
```

Requires Python **3.8+**.
Linux recommended (for full xattr/ACL support).

##

##  Command Line Usage

### Copy files

```bash
fylex copy ~/Downloads ~/Backup --resolve rename --algo xxhash --verify --verbose
```

* Smartly copies, resolves conflicts by renaming, verifies integrity via hash.
* Deprecated/replaced files stored under `~/Backup/fylex.deprecated/PROCESS_ID/`.

### Move files

```bash
fylex move ./data ./archive --resolve newer --match-glob "*.csv"
```

* Moves only `.csv` files, replacing only if source is newer.

### Undo

```bash
fylex undo 1002
```

* Undoes process with ID `1002`.

### Redo

```bash
fylex redo 1002
```

* Replays process with ID `1002`.

##

##  Python API Usage

```python
from fylex import filecopy, filemove, undo, redo

# Copy with filters & conflict resolution
filecopy(
    src="~/Downloads",
    dest="~/Backup",
    resolve="rename",
    algo="xxhash",
    verify=True,
    match_glob="*.jpg",
    verbose=True
)

# Move and preserve metadata
filemove("project/", "archive/", resolve="newer", preserve_meta=True)

# Undo / Redo
undo("1002")
redo("1002")
```
##

##  Function Reference

### `filecopy(src, dest, ...)`

**Description:** Smartly copies files from `src` to `dest` with conflict handling, filters, and safety nets.

**Parameters:**

| Param             | Type        | Default    | Description                                                                                     |                                         |
| ----------------- | ----------- | ---------- | ----------------------------------------------------------------------------------------------- | --------------------------------------- |
| `src`             | `str`       | `Path`     | required                                                                                        | Source file or directory                |
| `dest`            | `str`       | `Path`     | required                                                                                        | Destination directory                   |
| `resolve`         | `str`       | `"rename"` | Conflict strategy: `rename`, `replace`, `skip`, `larger`, `smaller`, `newer`, `older`, `prompt` |                                         |
| `algo`            | `str`       | `"xxhash"` | Hash algo: `xxhash`, `blake3`, `md5`, `sha256`, `sha512`                                        |                                         |
| `chunk_size`      | `int`       | `16MB`     | Buffer size for reading files                                                                   |                                         |
| `verbose`         | `bool`      | `True`     | Log to stdout                                                                                   |                                         |
| `dry_run`         | `bool`      | `False`    | Simulate only                                                                                   |                                         |
| `summary`         | `str`       | `Path`     | `None`                                                                                          | Path to copy `fylex.log` summary        |
| `match_regex`     | `str`       | `None`     | Regex include filter                                                                            |                                         |
| `match_names`     | `list[str]` | `None`     | Exact names include filter                                                                      |                                         |
| `match_glob`      | `list[str]` | `None`     | Glob include filter                                                                             |                                         |
| `exclude_regex`   | `str`       | `None`     | Regex exclude filter                                                                            |                                         |
| `exclude_names`   | `list[str]` | `None`     | Exact names exclude filter                                                                      |                                         |
| `exclude_glob`    | `list[str]` | `None`     | Glob exclude filter                                                                             |                                         |
| `recursive_check` | `bool`      | `False`    | Dedup check recursively in `dest`                                                               |                                         |
| `verify`          | `bool`      | `False`    | Verify hashes after copy                                                                        |                                         |
| `has_extension`   | `bool`      | `False`    | Match file extension in dedup check                                                             |                                         |
| `no_create`       | `bool`      | `False`    | Do not create `dest` if missing                                                                 |                                         |
| `preserve_meta`   | `bool`      | `True`     | Preserve timestamps, permissions, xattrs, ACLs                                                  |                                         |
| `backup`          | `str`       | `Path`     | `"fylex.deprecated"`                                                                            | Folder for deprecated/conflicting files |
| `recurse`         | `bool`      | `False`    | Traverse subdirectories in `src`                                                                |                                         |

**Example:**

```python
filecopy("photos", "photos_backup", resolve="newer", match_glob="*.png", verify=True)
```

##

### `filemove(src, dest, ...)`

Same params as `filecopy`, but moves files instead.
If conflicts exist, originals are moved into backup.

##

### `undo(p_id, verbose=True, force=False)`

Rollback a process by ID.

| Param     | Type   | Description                             |
| --------- | ------ | --------------------------------------- |
| `p_id`    | `str`  | Process ID (JSON log ID)                |
| `verbose` | `bool` | Enable logs                             |
| `force`   | `bool` | Continue undo even if some entries fail |

##

### `redo(p_id, verbose=True, force=False)`

Replay a process by ID. Same parameters as `undo`.

##

##  Example Use Cases

* **Daily backup with safety nets**

  ```bash
  fylex copy ~/work ~/backup --resolve newer --verify --summary=backup.log
  ```

* **Selective move**

  ```bash
  fylex move ./data ./archive --match-regex ".*2025.*\.csv"
  ```

* **Quick rollback**

  ```bash
  fylex undo 1021
  ```

* **Replay last operation for reproducibility**

  ```bash
  fylex redo 1021
  ```

##

##  Internals

* Hash cache stored in `file_cache.db` (SQLite)
* JSON logs in `json/` (both `.jsonl` and `.json` formats)
* Temporary files in `dest/fylex.tmp/` for atomic writes
* Backups in `dest/fylex.deprecated/{process_id}/`

##

## License

MIT © 2025 Sivaprasad Murali

---

✨ With **Fylex**, file management on Linux is no longer just copying and moving — it’s **safe, verifiable, reversible, and smart**.

---


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "fylex",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "file, copy, move, cli, linux, utility, xxhash, blake3, filter, conflict, backup, undo, redo, hashing, checksum, deduplication, data-integrity, file-management, sync, devtool, cli-tool, python-tool, smart-copy, smart-move, fylex",
    "author": null,
    "author_email": "Sivaprasad Murali <sivaprasad.off@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/1d/24/9450461dceb304a341c64d1ee3b4ad2fdc389ec69fff4e2a18e19cd4c8ae/fylex-1.0.2.tar.gz",
    "platform": null,
    "description": "# Fylex: The Linux File Ninja\n\n[![PyPI](https://img.shields.io/pypi/v/fylex.svg)](https://pypi.org/project/fylex/)\n[![Python 3.x](https://img.shields.io/badge/Python-3.x-blue.svg)](https://www.python.org/)\n[![PyPI Downloads](https://static.pepy.tech/personalized-badge/fylex?period=total\\&units=INTERNATIONAL_SYSTEM\\&left_color=black\\&right_color=green\\&left_text=downloads)](https://pepy.tech/projects/fylex)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[![20250918-2144-Tech-Neon-Design-simple-compose-01k5esk4tqf54rf0vh67m2ph4h.png](https://i.postimg.cc/L6F6V78T/20250918-2144-Tech-Neon-Design-simple-compose-01k5esk4tqf54rf0vh67m2ph4h.png)](https://postimg.cc/WtSvN5rF)\n\n**Fylex** is a **production-ready, Linux-tailored file management tool** that combines the best of\n`rsync`, `cp`, and Python\u2019s `shutil` \u2014 but goes **beyond** with:\n\n*  **Smart Copy & Move** with hashing (xxhash, blake3, SHA, MD5)\n*  **Advanced conflict resolution** (rename, skip, replace, larger/smaller, newer/older, prompt)\n*  **Filters**: regex, glob, exact filename matches, inclusion/exclusion\n*  **Safety nets**: undo, redo, backup of deprecated files\n*  **Data integrity**: hash verification, SQLite-backed hash cache for deduplication\n*  **Metadata preservation**: permissions, timestamps, xattrs, ACLs (Linux-specific)\n*  **CLI & Python API** for flexible usage\n\n\n##\n### Feature comparison  \n\n| Feature / Tool                  | Fylex | cp (coreutils) | rsync | shutil (Python stdlib) |\n|---------------------------------|-------|----------------|-------|-------------------------|\n| Primary purpose                 | Smart local copy/move with safety nets | Basic copy | Fast sync (local/remote) | Library-level file ops |\n| Undo / Redo                     | Yes \u2014 built-in JSON journaling | No | No | No |\n| Hash verification               | Yes \u2014 xxhash, blake3, sha256, etc. | No | Partial \u2014 checksums optional | No |\n| Hash cache (SQLite)             | Yes \u2014 avoids rehashing unchanged files | No | No | No |\n| Duplicate detection (dest)      | Yes \u2014 size + hash | No | Partial \u2014 based on size/checksums | No |\n| Conflict resolution             | Extensive \u2014 rename, replace, skip, newer/older, larger/smaller, prompt | None \u2014 overwrite only | Limited \u2014 flags like `--backup`, `--suffix` | None |\n| Metadata preservation           | Yes \u2014 mtime, perms, xattrs, ACLs on Linux | Partial \u2014 `-a` preserves many | Partial \u2014 `-a` preserves many | Partial \u2014 `copystat` only |\n| Atomic writes                   | Yes \u2014 via `fylex.tmp` | No | Partial \u2014 temp options exist | No |\n| Logging / audit trail           | Yes \u2014 JSON logs per process | No | Partial \u2014 verbose logs only | No |\n| CLI + Python API                | Yes \u2014 both | CLI only | CLI only (bindings exist) | Python API only |\n| Delta transfer (network)        | No \u2014 local only | No | Yes | No |\n| Remote / cloud support          | No \u2014 local-first | No | Yes \u2014 ssh/rsyncd | No |\n| Cross-platform                  | Partial \u2014 Linux-first (xattrs/ACL best) | Yes | Yes | Yes |\n| Performance (local)             | Very good \u2014 uses `copy_file_range` / `sendfile` | Good | Very good \u2014 efficient I/O | Moderate |\n| Learning curve                  | Moderate \u2014 many options | Very low | Moderate to high \u2014 many options | Low |\n| Best fit                        | Local integrity-critical workflows, reversible ops | Quick one-off copies | Local/remote sync and bandwidth-efficient backups | Small Python scripts |\n\n---\n\n## Honest strengths (where Fylex shines)\n\n* **Undo / Redo** \u2014 Most competitors don\u2019t offer a built-in reversible operation for arbitrary copy/move workflows. This is a major safety feature for power users.\n* **JSON audit trail** \u2014 Every process writes machine-readable logs that enable reproducibility and automation (and fuel the undo/redo).\n* **Hash verification + hash cache** \u2014 Optional verification plus an on-disk SQLite cache avoids repeated hashing of unchanged files and speeds repeated operations.\n* **Flexible conflict resolution** \u2014 Many realistic conflict policies (rename with suffix, replace, choose larger/newer, prompt) are available out-of-the-box.\n* **Linux metadata handling** \u2014 Attempts to preserve xattrs/ACLs when system tools are available\u2014valuable for server or system admin workflows.\n* **Atomic writes & backups** \u2014 Writes to a `.tmp` area and moves replaced files to `fylex.deprecated/PROCESS_ID` to avoid data loss during partial operations.\n* **Good local performance** \u2014 Uses `copy_file_range` or `sendfile` and falls back sensibly for portability.\n\n## Honest limitations (where other tools are better)\n\n* **Not a network delta-sync tool** \u2014 If you need efficient remote sync over low bandwidth, `rsync` or `rclone` is better (rsync implements delta transfer).\n* **Not a full backup system** \u2014 For encrypted, deduplicated backups with retention/versioning, choose `borg`/`restic`.\n* **Linux-first** \u2014 Windows/macOS will work for basic operations, but xattr/ACL preservation and some system calls are Linux-specific; Fylex is intentionally optimized for Linux environments.\n* **No built-in remote cloud backends** \u2014 If you need native S3/GoogleDrive/OneDrive support, `rclone` is the tool of choice.\n* **Single-process / scale** \u2014 Current design favors correctness and simplicity; large-scale parallel distributed copying may require additional engineering (e.g., a distributed worker model).\n* **Delta-copy library replacement** \u2014 You mentioned earlier replacing `pyrsync2` with a custom mechanism; Fylex does **not** implement network delta transfers (it focuses on local efficiency and correctness).\n\n##\n\n\n\n\n##  Safety Nets: Reliability First\n\nFylex is built with **data safety as priority**:\n\n*  **Undo**: Rollback the last copy/move operation (removes created files, restores moved ones).\n*  **Redo**: Replay an operation exactly as before.\n*  **Backups**: Replaced/conflicting files are moved into `fylex.deprecated/` (per process).\n*  **JSON logs**: Every operation is journaled (`json/{process_id}.json` + `.jsonl`).\n*  **Verification**: Optional hash verification ensures copy integrity.\n*  **Retries**: Up to 5 retries (`MAX_RETRIES`) on hash mismatch.\n*  **Protections**: Prevents overwriting itself, copying into subdirectories, or backup loops.\n\n##\n\n## Installation\n\n```bash\npip install fylex\n```\n\nRequires Python **3.8+**.\nLinux recommended (for full xattr/ACL support).\n\n##\n\n##  Command Line Usage\n\n### Copy files\n\n```bash\nfylex copy ~/Downloads ~/Backup --resolve rename --algo xxhash --verify --verbose\n```\n\n* Smartly copies, resolves conflicts by renaming, verifies integrity via hash.\n* Deprecated/replaced files stored under `~/Backup/fylex.deprecated/PROCESS_ID/`.\n\n### Move files\n\n```bash\nfylex move ./data ./archive --resolve newer --match-glob \"*.csv\"\n```\n\n* Moves only `.csv` files, replacing only if source is newer.\n\n### Undo\n\n```bash\nfylex undo 1002\n```\n\n* Undoes process with ID `1002`.\n\n### Redo\n\n```bash\nfylex redo 1002\n```\n\n* Replays process with ID `1002`.\n\n##\n\n##  Python API Usage\n\n```python\nfrom fylex import filecopy, filemove, undo, redo\n\n# Copy with filters & conflict resolution\nfilecopy(\n    src=\"~/Downloads\",\n    dest=\"~/Backup\",\n    resolve=\"rename\",\n    algo=\"xxhash\",\n    verify=True,\n    match_glob=\"*.jpg\",\n    verbose=True\n)\n\n# Move and preserve metadata\nfilemove(\"project/\", \"archive/\", resolve=\"newer\", preserve_meta=True)\n\n# Undo / Redo\nundo(\"1002\")\nredo(\"1002\")\n```\n##\n\n##  Function Reference\n\n### `filecopy(src, dest, ...)`\n\n**Description:** Smartly copies files from `src` to `dest` with conflict handling, filters, and safety nets.\n\n**Parameters:**\n\n| Param             | Type        | Default    | Description                                                                                     |                                         |\n| ----------------- | ----------- | ---------- | ----------------------------------------------------------------------------------------------- | --------------------------------------- |\n| `src`             | `str`       | `Path`     | required                                                                                        | Source file or directory                |\n| `dest`            | `str`       | `Path`     | required                                                                                        | Destination directory                   |\n| `resolve`         | `str`       | `\"rename\"` | Conflict strategy: `rename`, `replace`, `skip`, `larger`, `smaller`, `newer`, `older`, `prompt` |                                         |\n| `algo`            | `str`       | `\"xxhash\"` | Hash algo: `xxhash`, `blake3`, `md5`, `sha256`, `sha512`                                        |                                         |\n| `chunk_size`      | `int`       | `16MB`     | Buffer size for reading files                                                                   |                                         |\n| `verbose`         | `bool`      | `True`     | Log to stdout                                                                                   |                                         |\n| `dry_run`         | `bool`      | `False`    | Simulate only                                                                                   |                                         |\n| `summary`         | `str`       | `Path`     | `None`                                                                                          | Path to copy `fylex.log` summary        |\n| `match_regex`     | `str`       | `None`     | Regex include filter                                                                            |                                         |\n| `match_names`     | `list[str]` | `None`     | Exact names include filter                                                                      |                                         |\n| `match_glob`      | `list[str]` | `None`     | Glob include filter                                                                             |                                         |\n| `exclude_regex`   | `str`       | `None`     | Regex exclude filter                                                                            |                                         |\n| `exclude_names`   | `list[str]` | `None`     | Exact names exclude filter                                                                      |                                         |\n| `exclude_glob`    | `list[str]` | `None`     | Glob exclude filter                                                                             |                                         |\n| `recursive_check` | `bool`      | `False`    | Dedup check recursively in `dest`                                                               |                                         |\n| `verify`          | `bool`      | `False`    | Verify hashes after copy                                                                        |                                         |\n| `has_extension`   | `bool`      | `False`    | Match file extension in dedup check                                                             |                                         |\n| `no_create`       | `bool`      | `False`    | Do not create `dest` if missing                                                                 |                                         |\n| `preserve_meta`   | `bool`      | `True`     | Preserve timestamps, permissions, xattrs, ACLs                                                  |                                         |\n| `backup`          | `str`       | `Path`     | `\"fylex.deprecated\"`                                                                            | Folder for deprecated/conflicting files |\n| `recurse`         | `bool`      | `False`    | Traverse subdirectories in `src`                                                                |                                         |\n\n**Example:**\n\n```python\nfilecopy(\"photos\", \"photos_backup\", resolve=\"newer\", match_glob=\"*.png\", verify=True)\n```\n\n##\n\n### `filemove(src, dest, ...)`\n\nSame params as `filecopy`, but moves files instead.\nIf conflicts exist, originals are moved into backup.\n\n##\n\n### `undo(p_id, verbose=True, force=False)`\n\nRollback a process by ID.\n\n| Param     | Type   | Description                             |\n| --------- | ------ | --------------------------------------- |\n| `p_id`    | `str`  | Process ID (JSON log ID)                |\n| `verbose` | `bool` | Enable logs                             |\n| `force`   | `bool` | Continue undo even if some entries fail |\n\n##\n\n### `redo(p_id, verbose=True, force=False)`\n\nReplay a process by ID. Same parameters as `undo`.\n\n##\n\n##  Example Use Cases\n\n* **Daily backup with safety nets**\n\n  ```bash\n  fylex copy ~/work ~/backup --resolve newer --verify --summary=backup.log\n  ```\n\n* **Selective move**\n\n  ```bash\n  fylex move ./data ./archive --match-regex \".*2025.*\\.csv\"\n  ```\n\n* **Quick rollback**\n\n  ```bash\n  fylex undo 1021\n  ```\n\n* **Replay last operation for reproducibility**\n\n  ```bash\n  fylex redo 1021\n  ```\n\n##\n\n##  Internals\n\n* Hash cache stored in `file_cache.db` (SQLite)\n* JSON logs in `json/` (both `.jsonl` and `.json` formats)\n* Temporary files in `dest/fylex.tmp/` for atomic writes\n* Backups in `dest/fylex.deprecated/{process_id}/`\n\n##\n\n## License\n\nMIT \u00a9 2025 Sivaprasad Murali\n\n---\n\n\u2728 With **Fylex**, file management on Linux is no longer just copying and moving \u2014 it\u2019s **safe, verifiable, reversible, and smart**.\n\n---\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Fylex: A production-ready, high-performance file utility tailored for Linux \u2014 with smart copy/move, hashing, filters, undo/redo, and conflict resolution.",
    "version": "1.0.2",
    "project_urls": {
        "Documentation": "https://github.com/Crystallinecore/fylex#readme",
        "Homepage": "https://github.com/Crystallinecore/fylex",
        "Releases": "https://github.com/Crystallinecore/fylex/releases",
        "Source": "https://github.com/Crystallinecore/fylex",
        "Tracker": "https://github.com/Crystallinecore/fylex/issues"
    },
    "split_keywords": [
        "file",
        " copy",
        " move",
        " cli",
        " linux",
        " utility",
        " xxhash",
        " blake3",
        " filter",
        " conflict",
        " backup",
        " undo",
        " redo",
        " hashing",
        " checksum",
        " deduplication",
        " data-integrity",
        " file-management",
        " sync",
        " devtool",
        " cli-tool",
        " python-tool",
        " smart-copy",
        " smart-move",
        " fylex"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eedb9235db0aabfa04f51f6a670d5628d5b3ed62cf8c1843a3a42cf34d898cd8",
                "md5": "1efb25388c319af1937c9fcc5529b348",
                "sha256": "c64348939cee195c6a6745fe002f4ba76d689d36c949986072c12ad29210f16a"
            },
            "downloads": -1,
            "filename": "fylex-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1efb25388c319af1937c9fcc5529b348",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 18808,
            "upload_time": "2025-09-19T00:36:39",
            "upload_time_iso_8601": "2025-09-19T00:36:39.187742Z",
            "url": "https://files.pythonhosted.org/packages/ee/db/9235db0aabfa04f51f6a670d5628d5b3ed62cf8c1843a3a42cf34d898cd8/fylex-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1d249450461dceb304a341c64d1ee3b4ad2fdc389ec69fff4e2a18e19cd4c8ae",
                "md5": "bac1090e56cb687a110c78ea15c5847d",
                "sha256": "742572e702c659328d72fbbe48b7c815a415962cbe01011abbb15f1664d26533"
            },
            "downloads": -1,
            "filename": "fylex-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "bac1090e56cb687a110c78ea15c5847d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 23094,
            "upload_time": "2025-09-19T00:36:41",
            "upload_time_iso_8601": "2025-09-19T00:36:41.742655Z",
            "url": "https://files.pythonhosted.org/packages/1d/24/9450461dceb304a341c64d1ee3b4ad2fdc389ec69fff4e2a18e19cd4c8ae/fylex-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-19 00:36:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Crystallinecore",
    "github_project": "fylex#readme",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "fylex"
}
        
Elapsed time: 1.95389s