4 个版本 (2 个重大变更)
新 0.3.0 | 2024 年 8 月 18 日 |
---|---|
0.2.0 | 2024 年 2 月 1 日 |
0.1.2 | 2023 年 11 月 13 日 |
0.1.1 | 2023 年 9 月 18 日 |
0.1.0 |
|
1 在 #deduplication 中
每月 178 次下载
用于 2 crates
715KB
12K SLoC
快速、加密和去重备份库
关于
这个库为 rustic-rs 提供支持。这是一个提供快速、加密、去重备份的工具。它读取和写入 restic
仓库格式,该格式在其设计文档中有所描述。
注意: rustic_core
处于早期开发阶段,其 API 在下一个版本中可能会发生变化。如果您想对此提供反馈,请打开 问题。
联系方式
联系方式 | 在哪里? |
---|---|
问题跟踪器 | GitHub 问题 |
Discord | |
讨论 | GitHub 讨论区 |
用法
将此添加到您的 Cargo.toml
[dependencies]
rustic_core = "0.2"
crate 功能
此 crate 提供了一些功能来控制依赖项的使用
-
cli - 通过启用
clap
和merge
功能来支持 CLI 功能。 此功能默认禁用。 -
clap - 启用对
clap
crate 的依赖项,并启用从命令行解析。 此功能默认禁用。 -
merge - 启用将多个值合并为一个的功能,这需要启用
merge
依赖项。这对于解析命令行参数并将它们合并到一个中(例如config
)是必需的。 此功能默认禁用。 -
webdav - 启用对
dav-server
和futures
crate 的依赖。这使我们能够在命令行上异步运行 WebDAV 服务器。 该功能默认禁用。
示例
示例:初始化新的仓库
use rustic_backend::BackendOptions;
use rustic_core::{ConfigOptions, KeyOptions, Repository, RepositoryOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// Display info logs
let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
// Initialize Backends
let backends = BackendOptions::default()
.repository("/tmp/repo")
.to_backends()?;
// Init repository
let repo_opts = RepositoryOptions::default().password("test");
let key_opts = KeyOptions::default();
let config_opts = ConfigOptions::default();
let _repo = Repository::new(&repo_opts, backends)?.init(&key_opts, &config_opts)?;
// -> use _repo for any operation on an open repository
Ok(())
}
示例:创建新的快照
use rustic_backend::BackendOptions;
use rustic_core::{BackupOptions, PathList, Repository, RepositoryOptions, SnapshotOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// Display info logs
let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
// Initialize Backends
let backends = BackendOptions::default()
.repository("/tmp/repo")
.repo_hot("/tmp/repo2")
.to_backends()?;
// Open repository
let repo_opts = RepositoryOptions::default().password("test");
let repo = Repository::new(&repo_opts, backends)?
.open()?
.to_indexed_ids()?;
let backup_opts = BackupOptions::default();
let source = PathList::from_string(".")?.sanitize()?;
let snap = SnapshotOptions::default()
.add_tags("tag1,tag2")?
.to_snapshot()?;
// Create snapshot
let snap = repo.backup(&backup_opts, &source, snap)?;
println!("successfully created snapshot:\n{snap:#?}");
Ok(())
示例:恢复快照
use rustic_backend::BackendOptions;
use rustic_core::{LocalDestination, LsOptions, Repository, RepositoryOptions, RestoreOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// Display info logs
let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
// Initialize Backends
let backends = BackendOptions::default()
.repository("/tmp/repo")
.to_backends()?;
// Open repository
let repo_opts = RepositoryOptions::default().password("test");
let repo = Repository::new(&repo_opts, backends)?
.open()?
.to_indexed()?;
// use latest snapshot without filtering snapshots
let node = repo.node_from_snapshot_path("latest", |_| true)?;
// use list of the snapshot contents using no additional filtering
let streamer_opts = LsOptions::default();
let ls = repo.ls(&node, &streamer_opts)?;
let destination = "./restore/"; // restore to this destination dir
let create = true; // create destination dir, if it doesn't exist
let dest = LocalDestination::new(destination, create, !node.is_dir())?;
let opts = RestoreOptions::default();
let dry_run = false;
// create restore infos. Note: this also already creates needed dirs in the destination
let restore_infos = repo.prepare_restore(&opts, ls.clone(), &dest, dry_run)?;
repo.restore(restore_infos, &opts, ls, &dest)?;
Ok(())
}
示例:检查仓库
use rustic_backend::BackendOptions;
use rustic_core::{CheckOptions, Repository, RepositoryOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// Display info logs
let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
// Initialize Backends
let backends = BackendOptions::default()
.repository("/tmp/repo")
.to_backends()?;
// Open repository
let repo_opts = RepositoryOptions::default().password("test");
let repo = Repository::new(&repo_opts, backends)?.open()?;
// Check repository with standard options but omitting cache checks
let opts = CheckOptions::default().trust_cache(true);
repo.check(opts)?;
Ok(())
}
贡献
发现错误吗? 打开问题!
有改进的想法吗?不要保密!
请确保您已阅读贡献指南。
Rust 版本最低政策
此 crate 的最低支持的 rustc
版本是 1.76.0
。
当前政策是,使用此 crate 所需的最低 Rust 版本可以在次要版本更新中提高。例如,如果 crate 1.0
需要 Rust 1.20.0,那么所有 crate 1.0.z
的值也将需要 Rust 1.20.0 或更高版本。但是,对于 crate 1.y
且 y > 0
的情况,可能需要更高的最低 Rust 版本。
总的来说,此 crate 将对 Rust 的最低支持版本持保守态度。
许可证
许可协议为以下之一
依赖项
~22–37MB
~518K SLoC