gpt4 book ai didi

node.js - 为 OS X 构建重复数据删除应用程序,我应该使用什么/如何作为文件的哈希

转载 作者:IT王子 更新时间:2023-10-29 06:09:19 24 4
gpt4 key购买 nike

我即将踏上编程之旅,这无疑会以失败和/或将我的鼠标扔到我的 Mac 上而告终,但这是一个有趣的问题。

我想构建一个应用程序,它从某个基本目录开始扫描并递归循环遍历每个文件,如果它找到一个完全相同的文件,它将删除它,并在其位置创建一个符号链接(symbolic link)。基本上穷人重复数据删除。这实际上为我解决了一个真正的问题,因为我的 Mac 上有一堆重复的文件,我需要释放磁盘空间。

据我所知,这是策略:

  1. 递归循环,并为每个文件生成哈希。散列必须非常独特。这是第一个问题。我应该使用什么哈希?我如何通过这个神奇的哈希运行每个文件的全部二进制内容?

  2. 将每个文件的哈希值和完整路径存储在键/值存储中。我认为 Redis 因其速度而非常适合。

  3. 遍历键/值存储,找到重复的哈希,删除重复的文件,创建符号链接(symbolic link),并将键/值存储中的行标记为副本。

因此我的问题是:

  • 我应该为每个文件使用什么散列算法?这是怎么做到的?
  • 我正在考虑使用 node.js,因为 node 通常在 i/o 类型的事情上速度很快。问题是 Node 在 CPU 密集型的东西上很糟糕,所以散列可能是瓶颈。
  • 我还遗漏了哪些问题?

最佳答案

What hashing algorithm should I use for each file? How is this done?

使用 SHA1。 Git 使用 SHA1 为文件生成唯一的哈希值。几乎不可能发生碰撞。 There is no known collision of standard SHA1 .

I'm thinking about using node.js because node generally is fast at i/o types of things. The problem is that node sucks at CPU intensive stuff, so the hashing will probably be the bottleneck.

您的应用程序将有 2 种操作:

  • 读取文件(IO 绑定(bind))。
  • 计算哈希值(受 CPU 限制)。

我的建议是:不要在脚本语言(Ruby 或 JavaScript)中计算哈希,除非它有原生的哈希库。您可以只调用其他可执行文件,例如 sha1sum。它是用 C 语言编写的,应该非常快。

我认为您不需要 NodeJS。 NodeJS 在事件驱动 IO 中速度很快,但它不能提高你的 I/O 速度。我认为你不需要在这里实现事件驱动的 IO。

What other gotchas am I missing here?

我的建议:用你熟悉的语言来实现。不要过早过度设计。只有当你真的遇到性能问题时才优化它。

关于node.js - 为 OS X 构建重复数据删除应用程序,我应该使用什么/如何作为文件的哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com