syncbox/cli/
mod.rs

1use clap::Parser;
2use std::path::PathBuf;
3
4#[derive(Parser)]
5#[command(name = "syncbox")]
6#[command(about = "Sync files between directories", long_about = None)]
7pub struct Args {
8    /// Subcommand
9    #[command(subcommand)]
10    pub command: Command,
11}
12
13#[derive(clap::Subcommand)]
14pub enum Command {
15    Sync {
16        /// 源目录路径
17        source: PathBuf,
18        /// 目标目录路径
19        target: PathBuf,
20        /// 试运行模式(不实际写入)
21        #[arg(long)]
22        dry_run: bool,
23        /// 使用校验和比较文件内容(而非仅修改时间/大小)
24        #[arg(long)]
25        checksum: bool,
26        /// 删除目标目录中源目录不存在的文件
27        #[arg(long)]
28        delete: bool,
29        /// 排除同步的文件或目录(支持通配符,可多次指定)
30        #[arg(long, value_name = "PATTERN")]
31        exclude: Vec<String>,
32        /// 排除删除的文件或目录(即使 delete=true 也不会删这些,可多次指定)
33        #[arg(long, value_name = "PATTERN", alias = "delete-ignore")]
34        delete_exclude: Vec<String>,
35        /// 显示详细操作列表(哪些文件被同步/删除)
36        #[arg(long)]
37        detail: bool,
38    },
39    Run {
40        /// 任务名
41        name: String,
42        /// 配置文件路径 (默认: ./syncbox.toml)
43        #[arg(long, default_value = "syncbox.toml")]
44        config: PathBuf,
45        /// 试运行模式(不实际写入)
46        #[arg(long)]
47        dry_run: bool,
48        /// 使用校验和比较文件内容(而非仅修改时间/大小)
49        #[arg(long)]
50        checksum: bool,
51        /// 显示详细操作列表(哪些文件被同步/删除)
52        #[arg(long)]
53        detail: bool,
54    },
55
56    Watch {
57        /// 任务名
58        name: String,
59        /// 配置文件路径 (默认: ./syncbox.toml)
60        #[arg(long, default_value = "syncbox.toml")]
61        config: PathBuf,
62        /// 监听延时 (默认: 500ms)
63        #[arg(long, default_value = "500")]
64        delay: u64,
65        /// 试运行模式(不实际写入)
66        #[arg(long)]
67        dry_run: bool,
68        /// 使用校验和比较文件内容(而非仅修改时间/大小)
69        #[arg(long)]
70        checksum: bool,
71        /// 显示详细操作列表(哪些文件被同步/删除)
72        #[arg(long)]
73        detail: bool,
74    },
75}