fastsync 0.10.1

A fast, safe one-way directory synchronization tool for local folders and network transfers.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
_version: 2

cli.about:
  en: "A fast, reliable one-way directory synchronization tool for local and network sync"
  zh-CN: "支持本地与网络同步的快速、可靠单向目录同步工具"
cli.usage:
  en: "Usage"
  zh-CN: "用法"
cli.arguments:
  en: "Arguments"
  zh-CN: "参数"
cli.options:
  en: "Options"
  zh-CN: "选项"
cli.source:
  en: "Source directory."
  zh-CN: "源目录。"
cli.target:
  en: "Target directory."
  zh-CN: "目标目录。"
cli.dry_run:
  en: "Only generate the plan and summary without modifying the target directory."
  zh-CN: "只生成计划与摘要,不实际修改目标目录。"
cli.delete:
  en: "Delete extra entries in the target that do not exist in the source. Disabled by default to avoid accidental deletion."
  zh-CN: "删除目标端源目录中不存在的多余项。默认关闭,避免误删。"
cli.follow_symlinks:
  en: "Follow symbolic links during traversal. Disabled by default."
  zh-CN: "遍历时跟随符号链接。默认关闭。"
cli.exclude_from:
  en: "Read blacklist rules from FILE. Matching files or directories are ignored and protected from deletion."
  zh-CN: "从 FILE 读取黑名单规则。匹配的文件或目录会被忽略并保护不被删除。"
cli.include_from:
  en: "Read whitelist rules from FILE. Only matching files or directories participate in synchronization."
  zh-CN: "从 FILE 读取白名单规则。只有匹配的文件或目录参与同步。"
cli.compare:
  en: "File comparison strategy."
  zh-CN: "文件比较策略。"
cli.strict:
  en: "Shortcut for strict comparison: when sizes match, always use BLAKE3 to confirm content."
  zh-CN: "strict 比较模式的快捷方式:大小一致时始终使用 BLAKE3 确认内容。"
cli.hash:
  en: "Content verification hash algorithm. Currently supports BLAKE3."
  zh-CN: "内容校验哈希算法。当前支持 BLAKE3。"
cli.verify:
  en: "Post-copy verification level."
  zh-CN: "复制后的校验强度。"
cli.no_sync_metadata:
  en: "Disable separate metadata synchronization for same-name files with identical content."
  zh-CN: "禁用同名且内容相同文件的独立元数据同步。"
cli.preserve_times:
  en: "Apply source modification times to target files."
  zh-CN: "将源文件的修改时间同步到目标文件。"
cli.preserve_permissions:
  en: "Apply source basic permission bits to target files."
  zh-CN: "将源文件的基础权限位同步到目标文件。"
cli.no_atomic_write:
  en: "Disable temporary-file plus rename writes for target file replacement."
  zh-CN: "禁用临时文件 + 重命名写入目标文件。"
cli.threads:
  en: "Worker thread count; use a number or auto."
  zh-CN: "worker 线程数,可传数字或 auto。"
cli.queue_size:
  en: "Bounded task queue length; defaults to threads * 4."
  zh-CN: "有界任务队列长度,默认 threads * 4。"
cli.max_errors:
  en: "Maximum allowed errors before aborting."
  zh-CN: "最大允许错误数,达到阈值后中止。"
cli.stop_on_error:
  en: "Stop immediately after the first error."
  zh-CN: "首个错误后立即停止。"
cli.log_level:
  en: "Log level."
  zh-CN: "日志级别。"
cli.output:
  en: "Summary output format."
  zh-CN: "摘要输出格式。"
cli.lang:
  en: "Interface language. Uses the system locale when supported and falls back to English. Can also be set with FASTSYNC_LANG."
  zh-CN: "界面语言。支持时使用系统语言环境,未匹配时回退英文,也可通过 FASTSYNC_LANG 设置。"
cli.help:
  en: "Print help."
  zh-CN: "输出帮助。"
cli.version:
  en: "Print version."
  zh-CN: "输出版本。"
cli.network_help:
  en: |-
    Network one-shot commands:
      fastsync s <DIRECTORY> [-r|-m send|receive|both] [-a]
      fastsync c HOST[:PORT] <DIRECTORY> [-u] [-c CODE] [-d] [--strict] [--network-concurrency N]

    Use `fastsync share --help` or `fastsync connect --help` for network sync details.
  zh-CN: |-
    一次性网络同步命令:
      fastsync s <DIRECTORY> [-r|-m send|receive|both] [-a]
      fastsync c HOST[:PORT] <DIRECTORY> [-u] [-c CODE] [-d] [--strict] [--network-concurrency N]

    使用 `fastsync share --help` 或 `fastsync connect --help` 查看网络同步详情。

value.compare.fast:
  en: "Trust metadata when it matches; when metadata differs but sizes match, use BLAKE3 to confirm content."
  zh-CN: "元数据一致时信任元数据;元数据不一致但大小一致时再使用 BLAKE3 确认内容。"
value.compare.strict:
  en: "When sizes match, always use BLAKE3 to confirm content, even if metadata also matches."
  zh-CN: "大小一致时始终使用 BLAKE3 确认内容,即使元数据一致。"
value.verify.none:
  en: "Do not verify after copying."
  zh-CN: "不做复制后校验。"
value.verify.changed:
  en: "Verify files that were copied or replaced."
  zh-CN: "只校验发生复制或覆盖的文件。"
value.verify.all:
  en: "Verify all regular files in the source after synchronization."
  zh-CN: "校验源目录中所有普通文件。"
value.preserve.auto:
  en: "Apply source metadata to the target according to platform capability."
  zh-CN: "按平台能力将源端元数据应用到目标端。"
value.preserve.true:
  en: "Always apply source metadata to the target."
  zh-CN: "始终将源端元数据应用到目标端。"
value.preserve.false:
  en: "Do not apply source metadata to the target."
  zh-CN: "不将源端元数据应用到目标端。"
value.hash.blake3:
  en: "BLAKE3, the default strong verification algorithm."
  zh-CN: "BLAKE3,默认强校验算法。"

app.help_print_failed:
  en: "failed to print help"
  zh-CN: "输出帮助失败"
app.json_summary_failed:
  en: "failed to serialize JSON summary"
  zh-CN: "序列化 JSON 摘要失败"

progress.scan_source:
  en: "Scanning source"
  zh-CN: "扫描源目录"
progress.scan_target:
  en: "Scanning target"
  zh-CN: "扫描目标目录"
progress.build_plan:
  en: "Building plan"
  zh-CN: "生成同步计划"
progress.execute_plan:
  en: "Executing plan"
  zh-CN: "执行同步计划"
progress.verify_all:
  en: "Verifying files"
  zh-CN: "校验文件"
progress.network_send_manifest:
  en: "Sending manifest"
  zh-CN: "发送清单"
progress.network_receive_manifest:
  en: "Receiving manifest"
  zh-CN: "接收清单"
progress.network_serve_hashes:
  en: "Serving hashes"
  zh-CN: "响应哈希请求"
progress.network_plan_requests:
  en: "Planning requests"
  zh-CN: "规划文件请求"
progress.network_read_requests:
  en: "Reading requests"
  zh-CN: "读取文件请求"
progress.network_send_files:
  en: "Sending files"
  zh-CN: "发送文件"
progress.network_receive_files:
  en: "Receiving files"
  zh-CN: "接收文件"
progress.network_delete_obsolete:
  en: "Deleting obsolete"
  zh-CN: "删除陈旧项"
progress.network_apply_metadata:
  en: "Applying metadata"
  zh-CN: "应用元数据"
progress.starting:
  en: "starting"
  zh-CN: "准备中"
progress.hashes:
  en: "hashes"
  zh-CN: "哈希"
progress.operations:
  en: "ops"
  zh-CN: "操作"
progress.data:
  en: "data"
  zh-CN: "数据"
progress.speed:
  en: "speed"
  zh-CN: "速度"
progress.files:
  en: "files"
  zh-CN: "文件"
progress.dirs:
  en: "dirs"
  zh-CN: "目录"
progress.requests:
  en: "requests"
  zh-CN: "请求"
progress.deleted:
  en: "deleted"
  zh-CN: "删除"

network.share.about:
  en: "Start a one-shot QUIC directory sharing session."
  zh-CN: "启动一次性 QUIC 目录共享会话。"
network.share.directory:
  en: "Server-side directory to share. The client cannot choose this path."
  zh-CN: "服务端要共享的目录。客户端不能选择该路径。"
network.share.bind:
  en: "UDP address to listen on."
  zh-CN: "监听的 UDP 地址。"
network.share.mode:
  en: "Server permission mode: send, receive, or both. Short values: s, r, b. Defaults to send."
  zh-CN: "服务端权限模式:send、receive 或 both。短值:s、r、b。默认 send。"
network.share.receive:
  en: "Shortcut for --mode receive."
  zh-CN: "--mode receive 的快捷方式。"
network.share.both:
  en: "Shortcut for --mode both."
  zh-CN: "--mode both 的快捷方式。"
network.share.code:
  en: "Use a specific 6-digit one-time pairing code instead of generating one."
  zh-CN: "指定 6 位数字的一次性配对验证码,而不是自动生成。"
network.share.allow_delete:
  en: "Allow clients to delete extra entries on the server when they push with --delete. Disabled by default."
  zh-CN: "允许客户端在 push 且使用 --delete 时删除服务端多余项。默认关闭。"
network.share.max_failures:
  en: "Maximum failed pairing attempts before the server exits."
  zh-CN: "服务端退出前允许的最大配对失败次数。"
network.share.exclude_from:
  en: "Read server-side blacklist rules from FILE. Matching paths are not shared."
  zh-CN: "从 FILE 读取服务端黑名单规则。匹配路径不会被共享。"
network.share.include_from:
  en: "Read server-side whitelist rules from FILE. Only matching paths are shared."
  zh-CN: "从 FILE 读取服务端白名单规则。只有匹配路径会被共享。"
network.share.started:
  en: "fastsync one-shot share started"
  zh-CN: "fastsync 一次性共享已启动"
network.connect.about:
  en: "Connect to a one-shot QUIC directory sharing session."
  zh-CN: "连接一次性 QUIC 目录共享会话。"
network.connect.endpoint:
  en: "Sharing-side address, for example host, host:7443, or quic://host:7443."
  zh-CN: "共享方地址,例如 host、host:7443 或 quic://host:7443。"
network.connect.directory:
  en: "Client-side local directory."
  zh-CN: "客户端本地目录。"
network.connect.direction:
  en: "Sync direction: pull from server or push to server. Short values: p, u."
  zh-CN: "同步方向:从共享方下载 pull,或上传到共享方 push。短值:p、u。"
network.connect.push:
  en: "Upload local files to the sharing side. Shortcut for --direction push."
  zh-CN: "上传本地目录到共享方,等价于 --direction push。"
network.connect.pull:
  en: "Download files from the sharing side. This is the default."
  zh-CN: "从共享方下载目录,这是默认行为。"
network.connect.code:
  en: "6-digit one-time pairing code. If omitted, fastsync prompts for it."
  zh-CN: "6 位数字的一次性配对验证码。省略时会交互输入。"
network.connect.delete:
  en: "Delete extra entries in the receiving directory. For push, the server must also allow deletion."
  zh-CN: "删除接收目录中的多余项。push 时服务端也必须允许删除。"
network.connect.strict:
  en: "Use strict comparison: hash same-size local files even when metadata matches."
  zh-CN: "使用严格比较:同大小本地文件即使元数据一致也计算哈希。"
network.connect.no_preserve_times:
  en: "Do not preserve source modification times on received files and directories."
  zh-CN: "不在接收的文件和目录上保留源端修改时间。"
network.connect.preserve_permissions:
  en: "Preserve source permission bits on received files and directories. Disabled by default."
  zh-CN: "在接收的文件和目录上保留源端权限位。默认关闭。"
network.connect.network_concurrency:
  en: "Maximum concurrent network file streams. Defaults to 4."
  zh-CN: "最大并发网络文件流数量。默认 4。"
network.connect.exclude_from:
  en: "Read client-side blacklist rules from FILE. Matching local paths are ignored and protected from deletion."
  zh-CN: "从 FILE 读取客户端黑名单规则。匹配的本地路径会被忽略并保护不被删除。"
network.connect.include_from:
  en: "Read client-side whitelist rules from FILE. Only matching local paths participate in synchronization."
  zh-CN: "从 FILE 读取客户端白名单规则。只有匹配的本地路径参与同步。"
network.summary.title:
  en: "network sync complete"
  zh-CN: "网络同步完成"
network.summary.session:
  en: "Session"
  zh-CN: "会话"
network.summary.result:
  en: "Result"
  zh-CN: "结果"
network.summary.side:
  en: "Side"
  zh-CN: "角色"
network.summary.side_share:
  en: "sharing side"
  zh-CN: "共享方"
network.summary.side_connect:
  en: "connecting side"
  zh-CN: "连接方"
network.summary.direction:
  en: "Direction"
  zh-CN: "方向"
network.summary.direction_pull:
  en: "download"
  zh-CN: "下载"
network.summary.direction_push:
  en: "upload"
  zh-CN: "上传"
network.summary.directory:
  en: "Directory"
  zh-CN: "目录"
network.summary.remote:
  en: "Remote"
  zh-CN: "对端"
network.summary.concurrency:
  en: "File concurrency"
  zh-CN: "文件并发"
network.summary.files:
  en: "Files"
  zh-CN: "文件"
network.summary.data:
  en: "Data"
  zh-CN: "数据量"
network.summary.deleted:
  en: "Deleted"
  zh-CN: "删除"
network.summary.duration:
  en: "Duration"
  zh-CN: "耗时"
network.summary.throughput:
  en: "Throughput"
  zh-CN: "吞吐"

summary.status.dry_run_done:
  en: "Dry run complete"
  zh-CN: "预演完成"
summary.status.done:
  en: "Sync complete"
  zh-CN: "同步完成"
summary.status.done_with_errors:
  en: "Sync complete with errors"
  zh-CN: "同步完成,但存在错误"
summary.mode.dry_run:
  en: "dry-run, plan only"
  zh-CN: "dry-run,仅生成计划"
summary.mode.executed:
  en: "executed"
  zh-CN: "已执行"
summary.copy.planned:
  en: "Files to copy"
  zh-CN: "预计复制"
summary.copy.done:
  en: "Files copied"
  zh-CN: "已复制"
summary.delete.planned:
  en: "Entries to delete"
  zh-CN: "预计删除"
summary.delete.done:
  en: "Entries deleted"
  zh-CN: "已删除"
summary.paths:
  en: "Paths"
  zh-CN: "路径"
summary.source:
  en: "Source"
  zh-CN: "源目录"
summary.target:
  en: "Target"
  zh-CN: "目标目录"
summary.scan_plan:
  en: "Scan and Plan"
  zh-CN: "扫描与计划"
summary.run_mode:
  en: "Mode"
  zh-CN: "运行模式"
summary.source_entries:
  en: "Source entries"
  zh-CN: "源端条目"
summary.target_entries:
  en: "Target entries"
  zh-CN: "目标条目"
summary.planned_operations:
  en: "Operations"
  zh-CN: "计划操作"
summary.planned_data:
  en: "Planned data"
  zh-CN: "计划数据"
summary.execution:
  en: "Execution"
  zh-CN: "执行结果"
summary.files:
  en: "files"
  zh-CN: "个文件"
summary.metadata:
  en: "Metadata"
  zh-CN: "元数据"
summary.items:
  en: "items"
  zh-CN: ""
summary.created_dirs:
  en: "Dirs created"
  zh-CN: "新建目录"
summary.dirs:
  en: "dirs"
  zh-CN: "个目录"
summary.links:
  en: "links"
  zh-CN: "个链接"
summary.blake3_compared:
  en: "BLAKE3 compared"
  zh-CN: "BLAKE3比较"
summary.blake3_verified:
  en: "BLAKE3 verified"
  zh-CN: "BLAKE3校验"
summary.status:
  en: "Status"
  zh-CN: "状态"
summary.errors:
  en: "Errors"
  zh-CN: "错误"
summary.duration:
  en: "Duration"
  zh-CN: "耗时"

error.walk_dir:
  en: "failed to traverse directory: %{value}"
  zh-CN: "遍历目录失败: %{value}"
error.invalid_source:
  en: "source path does not exist or is not a directory: %{path}"
  zh-CN: "源目录不存在或不是目录: %{path}"
error.invalid_target:
  en: "target path exists but is not a directory: %{path}"
  zh-CN: "目标路径已存在但不是目录: %{path}"
error.path_type_conflict:
  en: "path type conflict: %{path}; source type is %{source}, target type is %{target}"
  zh-CN: "路径类型冲突: %{path},源类型为 %{source},目标类型为 %{target}"
error.path_outside_root:
  en: "path is outside the scan root: %{path}"
  zh-CN: "路径不在扫描根目录内: %{path}"
error.many:
  en: "%{count} errors occurred during execution; first error: %{first}"
  zh-CN: "执行过程中发生 %{count} 个错误,首个错误: %{first}"
error.verification_failed:
  en: "post-copy verification failed: %{path}"
  zh-CN: "复制后校验失败: %{path}"
error.unsupported_entry:
  en: "unsupported sync object type: %{path}"
  zh-CN: "不支持的同步对象类型: %{path}"
error.entry_kind.file:
  en: "file"
  zh-CN: "文件"
error.entry_kind.directory:
  en: "directory"
  zh-CN: "目录"
error.entry_kind.symlink:
  en: "symlink"
  zh-CN: "符号链接"

io.parse_threads:
  en: "failed to parse --threads: %{value}"
  zh-CN: "解析 --threads 失败: %{value}"
io.read_filter_file:
  en: "read filter rule file: %{path}"
  zh-CN: "读取过滤规则文件: %{path}"
io.parse_filter_rule:
  en: "parse filter rule at line %{value}"
  zh-CN: "解析第 %{value} 行过滤规则"
io.create_target_root:
  en: "create target root directory: %{path}"
  zh-CN: "创建目标根目录: %{path}"
io.create_directory:
  en: "create directory: %{path}"
  zh-CN: "创建目录: %{path}"
io.delete_file:
  en: "delete file: %{path}"
  zh-CN: "删除文件: %{path}"
io.delete_directory:
  en: "delete directory: %{path}"
  zh-CN: "删除目录: %{path}"
io.delete_symlink:
  en: "delete symlink: %{path}"
  zh-CN: "删除符号链接: %{path}"
io.open_source_file:
  en: "open source file: %{path}"
  zh-CN: "打开源文件: %{path}"
io.create_temp_file:
  en: "create temporary file: %{path}"
  zh-CN: "创建临时文件: %{path}"
io.copy_to_temp_file:
  en: "copy to temporary file: %{path}"
  zh-CN: "复制到临时文件: %{path}"
io.flush_temp_file:
  en: "flush temporary file: %{path}"
  zh-CN: "刷新临时文件: %{path}"
io.finish_temp_file:
  en: "finish writing temporary file: %{path}"
  zh-CN: "完成临时文件写入: %{path}"
io.sync_temp_file:
  en: "sync temporary file data: %{path}"
  zh-CN: "同步临时文件数据: %{path}"
io.remove_old_target_before_replace:
  en: "remove old target file before replacement: %{path}"
  zh-CN: "替换目标文件前删除旧文件: %{path}"
io.rename_temp_to_target:
  en: "rename temporary file to target: %{path}"
  zh-CN: "重命名临时文件到目标: %{path}"
io.copy_file_direct:
  en: "copy file directly: %{source} -> %{target}"
  zh-CN: "直接复制文件: %{source} -> %{target}"
io.copy_to_target_file:
  en: "copy to target file: %{path}"
  zh-CN: "复制到目标文件: %{path}"
io.flush_target_file:
  en: "flush target file: %{path}"
  zh-CN: "刷新目标文件: %{path}"
io.finish_target_file:
  en: "finish writing target file: %{path}"
  zh-CN: "完成目标文件写入: %{path}"
io.missing_parent:
  en: "target path has no parent directory: %{path}"
  zh-CN: "目标路径缺少父目录: %{path}"
io.create_parent:
  en: "create parent directory: %{path}"
  zh-CN: "创建父目录: %{path}"
io.read_source_metadata:
  en: "read source file metadata: %{path}"
  zh-CN: "读取源文件元数据: %{path}"
io.set_target_permissions:
  en: "set target file permissions: %{path}"
  zh-CN: "设置目标文件权限: %{path}"
io.set_target_times:
  en: "set target file timestamps: %{path}"
  zh-CN: "设置目标文件时间戳: %{path}"
io.read_metadata:
  en: "read metadata: %{path}"
  zh-CN: "读取元数据失败: %{path}"
io.read_symlink_metadata:
  en: "read symlink metadata: %{path}"
  zh-CN: "读取符号链接元数据失败: %{path}"
io.open_file_for_hash:
  en: "open file for hashing: %{path}"
  zh-CN: "打开文件用于哈希: %{path}"
io.read_file_for_hash:
  en: "read file for hashing: %{path}"
  zh-CN: "读取文件用于哈希: %{path}"

log.scan_started:
  en: "starting directory scan"
  zh-CN: "开始扫描目录"
log.scan_finished:
  en: "directory scan complete"
  zh-CN: "目录扫描完成"
log.plan_built:
  en: "sync plan generated"
  zh-CN: "同步计划已生成"
log.phase_finished:
  en: "sync phase complete"
  zh-CN: "同步阶段完成"
log.worker_stop_on_error:
  en: "worker stopped early because of an error"
  zh-CN: "worker 因错误提前停止"
log.file_copied:
  en: "file copy complete"
  zh-CN: "文件复制完成"
log.file_deleted:
  en: "file deletion complete"
  zh-CN: "文件删除完成"
log.directory_deleted:
  en: "directory deletion complete"
  zh-CN: "目录删除完成"
log.symlink_deleted:
  en: "symlink deletion complete"
  zh-CN: "符号链接删除完成"