westpoint-io/lazyrsync

GitHub: westpoint-io/lazyrsync

lazyrsync 是一个基于 Rust 和 ratatui 构建的 rsync 终端 UI 工具,通过可复用配置、预览差异和保护机制让文件同步更安全高效。

Stars: 153 | Forks: 6

lazyrsync

crates.io License: MIT Built with Rust TUI: ratatui Docs

lazyrsync demo

一个用于 `rsync` 的终端 UI —— 管理可复用的配置文件,在运行**之前**将传输预览为结构化的差异对比,并通过实时进度和取消功能监控运行过程。所有操作都在终端中完成,包括桌面 GUI 无法触及的通过 SSH 进行的操作。 ## 目录 - [为什么](#why) - [功能](#features) - [安装](#install) - [快速入门](#quickstart) - [快捷键](#keybindings) - [配置](#configuration) - [贡献](#contributing) - [致谢](#acknowledgements) - [许可证](#license) ## 为什么 `rsync` 是用于备份和同步的正确工具,但它的标志很容易弄错,一个错误就可能删除数据。lazyrsync 让你留在终端中,同时为你提供 GUI 般的安全性:只需保存一次你的传输任务,就能在运行前准确查看运行将带来的更改,并将破坏性的标志置于保护机制之后。 ## 功能 ### 配置文件与任务 保存一次“源 -> 目标”对,然后只需按一个键即可重新运行。 ![配置文件与任务](https://static.pigsec.cn/wp-content/uploads/repos/cas/ed/ed2cd98dd9adc9cb2720a8746853683f781761d7104c8b6e9c585f8058e6309b.gif) ### Dry-run 预览 按 `p` 键,观察传输过程如何解析为带有统计信息的 `+`/`~`/`-` 差异对比。在你确认之前,不会写入任何内容。 ![Dry-run 预览](https://static.pigsec.cn/wp-content/uploads/repos/cas/a2/a26ef23d7e7f29fe15f5453c224b90b2496eb2cd7a608e2f0483a3009a66393b.gif) ### 实时运行与取消 `r` 运行任务 —— 进度条会随着字节和文件计数的增加而填满。按 `c` 可在传输过程中停止。 ![实时运行与取消](https://static.pigsec.cn/wp-content/uploads/repos/cas/5d/5daddfa38dc34af1bd6bcee6502cb942939854916e7f2b36a08cd371147c3aa7.gif) ### 标志与 `--delete` 保护机制 以复选框形式切换 rsync 的选项。开启 `--delete` 时,它会要求你在删除任何内容之前进行确认。 ![标志与 --delete 保护机制](https://static.pigsec.cn/wp-content/uploads/repos/cas/56/56d96aee853c6d965ab91dbfa5caf7b922935ec5abeef134742b6ca32d27f63d.gif) ### 通过 SSH 在任务的任一侧放置 `user@host:/path`,它就会通过 SSH 运行 —— 远程源下载,远程目标上传。 ![通过 SSH](https://static.pigsec.cn/wp-content/uploads/repos/cas/9a/9a7ea95665656453e02e17db23762ddd15200db562b9c53a1cc35f11ec129115.gif) ### 快照 使用 `--link-dest` 保留带有硬链接的编号版本 —— 每次运行都会写入下一个目录(`1/`、`2/`、…)。 ![快照](https://static.pigsec.cn/wp-content/uploads/repos/cas/28/28df0a2da000ca95457d727583f10c44fa30ca60ebe1a08b2287e0e42e4993b0.gif) ## 安装 `rsync` 必须位于你的 `$PATH` 中。 ``` cargo install lazyrsync # crates.io cargo binstall lazyrsync # prebuilt release binary brew install westpoint-io/lazyrsync/lazyrsync # Homebrew yay -S lazyrsync # AUR (Arch) ``` 或者从源码构建: ``` cargo install --path . ``` ## 快速入门 ``` lazyrsync # launch the TUI ``` 1. 按 `]` 切换到 **Profiles**(配置文件)子标签页,然后按 `a` 添加配置文件。 2. 返回 **Tasks**(任务)页(`]`),按 `a` 添加任务:包括 **ID**、**Action**(操作,使用 `←/→` 在 Sync 和 Snapshot 之间切换)、**Source**(源)和 **Destination**(目标)。任一路径都可以是本地路径或远程的 `user@host:/path`。 3. 按 `p` 进行**预览**(dry-run)—— 你将看到确切的 `+`/`~`/`-` 更改和统计信息,并且不会写入任何内容。 4. 按 `r` **运行**它。在 **Runs** 面板中观看进度;按 `c` 取消。 一个任务仅仅是**源 -> 目标**,就像 rsync 命令行一样 —— 没有 push/pull,也没有单独的“远程”字段。Source 末尾加上 `/` 会复制其*内容*;如果不加,则会复制文件夹本身。 ### 解析 / 检查(无头模式) lazyrsync 可以打印出配置文件解析出的确切 rsync 命令 —— 这对于审查或将其放入脚本中非常方便。目前尚不支持以无头模式运行传输;请使用 TUI 来实际运行它们。 ``` lazyrsync list # list profiles and their resolved rsync commands lazyrsync run NAME # print the resolved command(s) for a profile lazyrsync run NAME -n # print the dry-run form (with -n) ``` ## 快捷键 在应用中按 `?` 可获取完整的、上下文感知的列表。以下是基本快捷键: | 按键 | 操作 | |-----|--------| | `1`–`4`, `Tab` | 聚焦侧边面板(Runs / Tasks · Profiles / Flags / Filters) | | `]` | 切换 Tasks / Profiles 子标签页 | | `j`/`k`, `↑`/`↓` | 移动光标 | | `space` / `enter` | 选择任务(或切换高亮显示的标志) | | `a` | 添加任务(或在 Profiles 子标签页上添加配置文件) | | `p` | 预览(dry-run)选定的任务 | | `r` / `R` | 运行选定的任务 / 运行配置文件中的所有任务 | | `e` / `s` / `i` / `x` | 编辑 Basics / SSH / Filters / Advanced | | `d` | 删除(需先确认) | | `V` | 可视范围(多选),然后 `r`/`d` 对该区块执行操作 | | `c` | 取消正在运行的任务 | | `/` | 筛选列表,或搜索运行输出 | | `q` / `Esc` | 退出 | ## 配置 配置文件和设置位于 `$XDG_CONFIG_HOME/lazyrsync/`(通常是 `~/.config/lazyrsync/`)下: - `profiles.toml` —— 你的配置文件和任务 - `settings.toml` —— 首选项(主题、提示、`skip_delete_warning`) ## 致谢 - [lazygit](https://github.com/jesseduffield/lazygit) —— 其键盘驱动、基于面板的工作流启发了本项目的 TUI。 - [ratatui](https://ratatui.rs) —— lazyrsync 所基于的 Rust TUI 库。 ## 许可证 [MIT](LICENSE)。
标签:Python安全, Ratatui, rsync, Rust, TUI, 内存分配, 可视化界面, 备份, 文件同步, 终端工具, 网络流量审计, 通知系统