
桌面应用【免费下载链接】czkawkaMulti functional app to find duplicates, empty folders, similar images etc.项目地址https://gitcode.com/GitHub_Trending/cz/czkawka点击查看免费下载导读本文以 Czkawka 仓库的顶层指南 instructions/Instruction.md 为骨架系统讲解这个多工具文件清理应用的总体架构多个独立前端Krokiet、CLI、GTK、Cedinia如何共享同一个核心库Reference / Included / Excluded 等全局术语的准确定义以及贯穿所有前端的配置Configuration与缓存Cache文件机制——包括各平台默认路径、环境变量覆盖、可移动设备便携化部署以及 LTO、原生 CPU 指令、prehash 预哈希缓存等实战调优技巧。读完本文你将掌握 Czkawka 系应用的目录组织方式、缓存文件命名与手工编辑方法并能基于仓库源码理解这些机制的底层实现。一、多前端 共享核心库的总体架构Czkawka 不是单个程序而是一组共享同一核心库czkawka_core的独立前端。顶层指南在 instructions/Instruction.md 中明确列出了每个前端各自的专属文档前端定位专属文档KrokietSlint 前端推荐的全平台 GUIinstructions/Instruction_Krokiet.mdCLI命令行前端完整参数参考与自动化示例instructions/Instruction_CLI.mdGTK GUI遗留前端12.0 为最后一个版本建议迁移到 Krokietinstructions/Instruction_GTK.mdczkawka_core核心库集成说明工具描述、API、嵌入方式instructions/Instruction_Core.mdFAQ来自 1200 GitHub issue 的常见问题空白窗口、ffmpeg、最小文件大小等instructions/FAQ.md翻译如何贡献或新增语言instructions/Translations.md从仓库目录结构可以印证这一架构krokiet/、czkawka_cli/、czkawka_gui/、cedinia/Android 触摸 GUI四个前端目录各自独立而公共逻辑集中在czkawka_core/src/common/与czkawka_core/src/tools/下例如目录遍历dir_traversal.rs、缓存读写cache.rs、配置/缓存路径解析config_cache_path.rs都是共享实现。核心库还提供localizer_core.rs等本地化设施并被四个前端同时引用。二、跨前端共享的核心术语Terminology顶层指南定义了一套在所有前端中通用的术语理解它们是与 GUI/CLI 打交道的基础1. Reference paths参考路径添加目录或文件后可在其旁边的复选框中将其标记为Reference pathsGUI 中勾选CLI 中在支持的场景下使用对应标志。Reference paths参与比较但受到保护任何 UI 或 CLI 的自动操作都不能修改、移动或删除它们。支持的工具有Duplicate Files重复文件、Similar Images相似图片、Similar Videos相似视频、Same Music相同音乐。典型使用场景用工作目录与主备份目录对比清理重复文件时保护原始文件不被误删把数据集当作只读基线使用。2. Included / Excluded paths包含 / 排除路径Included paths是会被工具扫描的路径Excluded paths是在扫描期间被显式忽略的路径。3. Excluded items排除条目以glob 模式匹配完整文件/目录路径例如*/tmp*、*/.git。比 Excluded paths 更灵活但匹配开销略高稍慢。4. Configuration vs Cache配置与缓存配置文件是前端专属的GTK、Krokiet、CLI 之间的配置不共享。缓存文件在所有前端之间共享缓存中保存已计算的数据哈希、缩略图、分析结果放在共享缓存目录中所有前端都能复用计算结果。在 Krokiet 专属文档 instructions/Instruction_Krokiet.md 的术语表中还有进一步细化Prehash指文件开头与结尾的快速部分哈希用于在计算完整哈希之前快速排除非重复文件Perceptual hash感知哈希是为相似内容产生相似哈希的内容哈希用于相似图片、视频与音乐指纹模式。三、配置与缓存文件位置、命名与手动编辑1. 配置文件前端专属不共享GTK在用户配置目录下存放czkawka_gui_config.txt。Krokiet在用户配置目录下存放config_general.json和config_preset_N.jsonLinux 上为~/.config/krokiet/。CLI不存储配置文件所有参数通过命令行传入。2. 缓存文件所有前端共享缓存保存已计算的结果哈希、缩略图、解析后的元数据共享以避免重复计算。主要文件包括缓存文件内容cache_similar_image_SIZE_HASH_FILTER.bin/.json图片哈希cache_duplicates_HASH.txt重复文件哈希cache_similar_videos.bin/.json视频签名cache_broken_files.txt损坏文件检查结果从仓库源码 czkawka_core/src/common/cache/cleaning.rs 可以看到更完整的缓存文件命名规范CacheType::from_filenamecache_duplicates_{hash|size}_{版本}.bin与cache_duplicates_{hash|size}_prehash_{版本}.bin重复文件含 prehash 变体cache_same_music_tags_{版本}.bin、cache_same_music_fingerprints_{版本}.bin音乐标签 / 指纹cache_similar_images_{尺寸}_{版本}.bin相似图片SIZE即哈希尺寸 8/16/32/64cache_similar_videos_{版本}__{窗口数}.bin相似视频cache_broken_files_{版本}.bin、cache_exif_remover_{版本}.bin、cache_video_transcode_{版本}.bin、cache_video_crop_{版本}_{标识}.bin。文件名中的版本号由 czkawka_core/src/common/cache.rs 中的常量控制如CACHE_VERSION 100、CACHE_DUPLICATE_VERSION 120等缓存格式升级时版本号随之更新避免旧缓存被误读。JSON 格式缓存可以手工编辑例如把整个集合迁移到不同磁盘或机器时很有用。要生成 JSON 格式需在设置中启用 Save also as JSON。默认加载.bin文件若.bin缺失则回退使用.json。在源码层面这个“先 bin 后 json”的回退逻辑实现在 czkawka_core/src/common/config_cache_path.rs 的open_cache_folder中保存时按需同时写.bin与.json读取时先尝试打开.bin失败或不存在再尝试.json。序列化采用bincode限制 8 GiB 内存上限见 cache.rs 的MEMORY_LIMITJSON 分支使用serde_json。3. 默认路径一览按操作系统GTK 与 CLI 的配置/缓存均使用Czkawka命名Krokiet 的配置使用Krokiet命名但缓存仍使用CzkawkaOSGTK/CLI 配置Krokiet 配置缓存所有前端Linux~/.config/czkawka/~/.config/krokiet/~/.cache/czkawka/macOS~/Library/Application Support/pl.Qarmin.Czkawka/~/Library/Application Support/pl.Qarmin.Krokiet/~/Library/Caches/pl.Qarmin.Czkawka/Windows%APPDATA%\Qarmin\Czkawka\config\%APPDATA%\Qarmin\Krokiet\config\%LOCALAPPDATA%\Qarmin\Czkawka\cache\这些默认路径由 czkawka_core/src/common/config_cache_path.rs 的set_config_cache_path通过directories_next::ProjectDirs::from(pl, Qarmin, name)计算得出源码注释也印证Linux 为~/.config/czkawkaWindows 为%APPDATA%\Qarmin\Czkawka\configmacOS 为~/Library/Application Support/pl.Qarmin.Czkawka。在 Android 上target_os android由于没有标准 UNIX 主目录概念代码改用DATA_DIR或HOME环境变量下的cache/与files/目录由宿主应用如 Cedinia在调用set_config_cache_path前设置。4. 环境变量覆盖与便携部署可通过环境变量覆盖默认路径CZKAWKA_CONFIG_PATH/media/rafal/Ventoy/config CZKAWKA_CACHE_PATH/media/rafal/Ventoy/cache krokiet源码中resolve_folderconfig_cache_path.rs负责解析这些变量若环境变量为空则使用默认目录若指定的路径不存在或不是目录则产生警告并回退到默认目录成功则进行dunace::canonicalize规范化。因此环境变量路径会被自动创建create_dir_all方便便携式部署。官方还给出了一个可放在 USB 驱动器二进制旁的便携启动脚本#!/bin/bash CZKAWKA_CONFIG_PATH$(dirname $(realpath $0))/config CZKAWKA_CACHE_PATH$(dirname $(realpath $0))/cache ./krokiet这样配置与缓存都会落在 U 盘上在任意机器上即插即用且不会污染宿主机的用户目录。四、Tips、Tricks 与已知问题含源码级原理顶层指南的 Tips 部分浓缩了多年使用经验以下逐条展开并结合仓库源码说明其原理。1. 使用 LTO 加速并瘦身在Cargo.toml中加入以下内容可获得小幅性能提升并显著减小二进制体积[profile.release] lto thin # or fatLTO链接时优化让编译器在链接阶段做跨 crate 内联优化thin是折中方案fat优化更彻底但编译更慢。这是构建期优化适用于所有前端根目录 Cargo.toml 是 workspace 清单各前端 crate 均有自己的Cargo.toml。2. 使用原生 CPU 指令集加速x86_64-v4 上图片哈希可提速 10-20%RUSTFLAGS-C target-cpunative cargo build --release或全局配置在~/.cargo/config.toml[target.x86_64-unknown-linux-gnu] rustflags [-C, target-cpunative]原理是启用当前 CPU 的扩展指令如 AVX-512/AVX2尤其对图片哈希这类 SIMD 密集型计算收益明显。注意这样编译出的二进制只能在具备相应指令集的 CPU 上运行分发时应使用默认保守目标。3. 缓存加载缓慢的处置如果加载缓存很慢之前扫描过非常庞大的集合可以直接重命名或删除对应的缓存文件例如cache_similar_image_*.bin。缓存会在下次扫描时仅用当前扫描到的条目重新生成从而去掉海量历史条目。4. 部分扫描Partial scanning你可以中途停止扫描。所有已计算的哈希已经写入缓存下次完整扫描会自动加速——这是“先到先得”的缓存写入设计扫描过程中边算边写停止只是中断后续部分。5. Prehash 预哈希缓存功能缓存大文件的部分哈希文件开头与结尾各 4 KB使重新扫描时只需对新文件或已变更文件做完整哈希。Krokiet 中默认启用。CLI 中必须显式开启--use-prehash-cache。若担心缓存文件体积可关闭。源码级佐证CLI 参数定义在 czkawka_cli/src/commands.rs--use-prehash-cache-u与--minimal-prehash-cache-size默认值257144 字节约 251 KiB即小于该大小的文件不做 prehash 缓存。在 czkawka_core/src/tools/duplicate/core.rs 中prehash_load_cache_at_start在扫描开始时加载 prehash 缓存prehash_save_cache_at_exit在结束时把满足minimal_prehash_cache_file_size的条目写回prehashing阶段用rayon并行计算with_max_len(3)各文件的起始/结尾块哈希先用快速部分哈希排除非重复文件再对候选做完整哈希。从 cache.rs 可以看到 prehash 缓存拥有独立的版本常量CACHE_DUPLICATE_PREHASH_VERSION且文件名带_prehash_标记见上文CacheType::from_filename的匹配逻辑。6. 可移动磁盘的缓存策略在扫描经常拔插的外部磁盘时请关闭 Delete outdated cache entries automatically自动删除过期缓存条目改为手动使用 Remove outdated results移除过期结果。否则每次断开磁盘缓存条目会被当作“已过期”而驱逐插回后又要重新计算。源码依据czkawka_core/src/common/cache/cleaning.rs 中should_clean_cache通过记录在cleaning_timestamps.json的时间戳决定是否清理默认清理间隔为7 天可用环境变量CZKAWKA_CACHE_CLEANING_INTERVAL_SECONDS覆盖见 cache.rs。自动清理只在间隔到期时执行且clean_cache_file_typed会逐条校验缓存条目的路径是否仍存在、大小与修改时间是否匹配不匹配即移除。对经常拔插的磁盘这一“存在性校验”会误删大量有效条目因此官方建议关闭自动清理。五、实践建议汇总日常使用优先选择 Krokietinstructions/Instruction_Krokiet.mdGTK 前端已停止维护CLI 适合脚本自动化instructions/Instruction_CLI.md。保护重要文件在 Included paths 中将备份目录标记为 Reference paths再对重复组执行“除最旧/最新外的其余文件”选择与删除。换机或迁移直接复制整个缓存目录如~/.cache/czkawka/即可复用全部哈希如需手工修改先在设置中开启 “Save also as JSON”。便携场景按上文便携脚本将配置/缓存重定向到 U 盘配合外部磁盘扫描时关闭自动缓存清理。性能构建需要最大吞吐时使用RUSTFLAGS-C target-cpunative与lto thinCLI 自动化大批量查重时显式加--use-prehash-cache。以上所有机制路径解析、缓存格式、清理策略、prehash均可在仓库源码中直接查阅验证路径解析见 czkawka_core/src/common/config_cache_path.rs缓存读写见 czkawka_core/src/common/cache.rs缓存清理见 czkawka_core/src/common/cache/cleaning.rs其单元测试如清理混合场景、停止标志中断、文件名类型识别也一并包含在同文件的tests模块中可作为理解行为的可运行参考。赞分享桌面应用【免费下载链接】czkawkaMulti functional app to find duplicates, empty folders, similar images etc.项目地址https://gitcode.com/GitHub_Trending/cz/czkawka点击查看免费下载相关推荐Polar 前端服务端跨请求 LRU 缓存实战从 React.cache() 到 Fluid Compute 共享缓存Polar 前端服务端跨请求 LRU 缓存实战从 React.cache 到 Fluid Compute 共享缓存 导读 本指南基于 Polar 仓库中 .a后端前端金融科技Earthly 缓存机制深度指南从层缓存、缓存挂载到 Auto-skip 与缓存管理Earthly 缓存机制深度指南从层缓存、缓存挂载到 Auto skip 与缓存管理 Caching缓存是 Earthly 构建框架的心脏也是其构建速度CI/CDDevOps构建工具libfaketime性能优化缓存机制、共享内存和信号量配置详解libfaketime性能优化缓存机制、共享内存和信号量配置详解 libfaketime是一款强大的时间模拟工具它通过拦截系统调用来为应用程序提供虚假的时间上一篇大气层整合包安装指南从黑屏开机到金手指生效下一篇TanStack Table Ember 单元格合并Cell Spanning实战指南从 spanRows 到 colSpan 汇总行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考