通过哈希比较文件夹内容。

folderhash的Python项目详细描述


通过哈希比较文件夹内容。 文件i/o和散列是在线程中使用Curio库完成的,以使比较尽可能快!

我使用folderhash来额外保证大的或重要的文件副本已经被准确地执行。

安装

从pypi安装应该很容易:

$ pip install folderhash

folderhash仅支持python 3.6或更高版本。

演示

$ mkdir -p /tmp/demo/a /tmp/demo/b  # just some setup
$cd /tmp/demo
$ touch a/a a/b a/c b/a b/b b/d
$echo"DIFFERENT CONTENT" >> a/b
$ folderhash a b  # the simplest case--compare two folders
9fb5d41e2533b73381bdde8e3ac2d60a6a18467674771187595d83e9bfa30909 a/b
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a b/b

a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a a/c
ABSENT b/c

ABSENT a/d
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a b/d

$# you can change the hash algorithm!
$# all of the algorithms in your Python's `hashlib` are available
$# default is sha3_256
$ folderhash -s md5 a b
128edd12d0b04e23d10c4747d0da2c03 a/b
d41d8cd98f00b204e9800998ecf8427e b/b

d41d8cd98f00b204e9800998ecf8427e a/c
ABSENT b/c

ABSENT a/d
d41d8cd98f00b204e9800998ecf8427e b/d

$# it works with relative paths, too
$cd a
$ folderhash . ../b
9fb5d41e2533b73381bdde8e3ac2d60a6a18467674771187595d83e9bfa30909 ./b
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a ../b/b

a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a ./c
ABSENT ../b/c

ABSENT ./d
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a ../b/d

$# you can do the hashing separately and compare at a later time
$# absolute paths are always shown here
$cd ..
$ folderhash a > a.txt
$ folderhash b > b.txt
$ folderhash -a a.txt -b b.txt
9fb5d41e2533b73381bdde8e3ac2d60a6a18467674771187595d83e9bfa30909 /tmp/demo/a/b
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a /tmp/demo/b/b

a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a /tmp/demo/a/c
ABSENT /tmp/demo/b/c

ABSENT /tmp/demo/a/d
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a /tmp/demo/b/d

$# the format of the hash files is simple: {hash_value}<SP>{full_path}
$ cat a.txt
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a /tmp/demo/a/a
9fb5d41e2533b73381bdde8e3ac2d60a6a18467674771187595d83e9bfa30909 /tmp/demo/a/b
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a /tmp/demo/a/c

更改日志

截至2017年8月8日的变化

1.0.1<;2017年8月8日>;

  • 一些自述文件修复程序
  • 将pypi开发状态分类器从beta改为production/stable
  • 在生成输出时,显示相对于输入参数的路径,而不是绝对路径。我想这样更容易理解。
  • 为空哈希文件的输入添加一些错误检查

1.0.0<;2017年8月7日>;

  • 初始稳定释放到PYPI!

贡献

有很多方法可以为开源项目做出贡献,但最常见的两种方法是报告错误和贡献代码。

如果您有一个bug或问题要报告,请访问issues page on Github并在那里打开一个问题。

许可证

麻省理工学院。有关详细信息,请参阅LICENSE.rst文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于从特定供应商处查找java的vbscript VBS脚本   java如何向用户显示可编辑的结果?   nlp NER CRF,线程“main”java中的异常。lang.NoClassDefFoundError:org/slf4j/LoggerFactory   java将查询结果发送到spring boot中查看   java LIBGDX动画,无需enternig render()   在一个recyclerview中具有不同适配器的RecyclerViewWMergeadapter中的java搜索项   java在swing中创建具有多选功能的Jcombobox   java使用GSON计算JSON响应中的id   python如何在java中重载等式和打印?   运行emulator时,java Android studio 3.1未能加载aapt   在数组列表中存储多个字符串的java   多线程如何找到在java中成功完成的第一个线程的结果?   Android Studio/Gradle:为Java库模块设置Java目标版本   隐藏随机数确认java中的错误结果   java Android Studio 2.1