remdups-删除重复文件

remdups的Python项目详细描述


Author:Roland Puntaier
Homepage:https://github.com/rpuntaie/remdups
License:See LICENSE file

重复记录

remdups生成一个脚本

  • 删除重复文件
  • 将文件从另一个目录复制到此目录,忽略重复项
  • 将文件从另一个目录移动到此目录,忽略重复项

在shell中执行之前,应该进一步检查生成的脚本。

用法

  1. 可选。您可以选择一个或多个源+哈希方法,例如:

    cat > .remdups_c.sha512
    cat > .remdups_e.md5
    

    所有。remdups{c,b,d,e,n}.{sha512,sha384,sha256,sha224,sha1,md5} 参与最后的散列。如果不生成这样的文件,则默认为:

    .remdups_c.sha256
    

    { C′:“内容”、“b”:“块”、“d”:“日期”、“e”:“ExIF”、“n”:“名称”}/P>

  1. 通过以下任一方法创建哈希文件(可能需要很长时间):

    remdups
    remdups update
    remdups update <fromdir>
    

    散列将添加到all.remdups_x.y。以重新散列所有文件:

    rm .remdups_*
    
  2. 使用rm、mv、cp命令制作脚本。 它可以用不同的选项重复,直到脚本好为止。

    $remdups rm-s脚本.sh $remdups cp-s script.bat如果使用<;fromdir>; $remdups mv-s script.py如果使用<;fromdir>;

    如果文件以.sh结尾,则使用cp,文件名为linux格式。 这也适用于带有msys、msys2和cygwin的windows。

    如果文件以.bat结尾,则使用windows命令。

    如果文件以.py结尾,则使用python函数。

  3. 检查脚本,必要时返回到2.。 对脚本的更改也可以通过编辑器完成。

  4. 执行脚本

    $./script.sh

或者,您可以从自己的python脚本中使用remdup,或者从python提示符中交互使用remdup。

安装

  • 直接从PYPI获得:
$ pip install remdups
  • github:clone,切换到目录并执行
$ python setup.py install
  • 如果您计划扩展此工具

    • 叉子在github
    • 从叉子克隆到PC
    • 执行可编辑安装
    $ pip install -e .
    
    • 更改后测试,覆盖率达到100%
    $ py.test --cov remdups.py --cov-report term-missing
    
    • 考虑共享对其他人有用的更改(github拉取请求)。

提示

对于更高级的文件选择,可以使用find。 以下示例忽略目录old,并为所有JPEG文件生成哈希:

$ find . -path "old" -prune -or -not -type d -and -iname "\*.jpg" -exec sha256sum {}\; > .remdups_c.sha256

命令行

除了提供的帮助之外,还提供了以下帮助:

remdups --help

散列的源可以是:

{'c': 'content', 'b': 'block', 'd': 'date', 'e': 'exif', 'n': 'name'}

不要包含n,因为找不到具有不同名称的相同文件。c是最好的。

例如:

cat > .remdups_b.sha512
cat > .remdups_c.sha256

从当前目录中填充哈希文件:

remdups update

或者从另一个目录填充哈希文件:

remdups update <fromdir>

在后一种情况下,哈希文件中的路径将具有//\\ 在随后的mvcp命令中标记新亲属路径的开始。

填充哈希文件后,创建脚本。这取决于使用的扩展名:

remdups <command> -s script.sh <options>
remdups <command> -s script.bat <options>
remdups <command> -s script.py <options>

command可以是rmcpmv。 还有dupsofdupsoftail,但它们不接受--script,而是打印输出。

--keep-in--keep-out--comment-out将删除重复组的不同文件。 --safe将在创建脚本之前进行逐字节比较。这需要更长的时间。

cpmv也采用--sort:在这种情况下,不会重新创建树,但会对文件进行排序 使用文件修改日期提供的树结构。见https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

API

使用您自己的python脚本,您可以加载用于散列的文件并使用 立即加载内容以创建新文件(如果不重复)。

fromremdupsimport*hasher=Hasher()allduplicates=[]forfilename,duplicates,contentinhasher.foreachcontent('.'):ifduplicates:allduplicates.append(f)else:assertcontent!=[]#some .remdups_ must be with (c)ontentnfilename='afilehere'withopen(nfilename,'wb')asnf:forbufincontent:nf.write(buf)shutil.copystat(filename,nfilename)

foreachcontent()使用scandir(),但不向.remdup_文件添加重复的文件。

^{公关1七}$

如果不想保留内容,请不要为scandir中的content提供[]scandir()将散列.remdup_文件中尚未包含的所有文件,并返回文件名。

此代码通过散列和创建副本(如果不重复)来引用树。

importosimportremdupsos.chdir('dir/to/resort/to')withopen('.remdups_c.sha256','w'):passremdups.resort('../some/dir/here',"%y%m/%d_%H%M%S")

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

推荐PyPI第三方库


热门话题
java将spring j_spring_安全检查迁移到登录   log4j2中自定义appender中AppConfig的java问题   在将java转换为Json时是否可以忽略内部类名和变量   用java将PDF文件转换为十六进制格式   java将值从AsyncTask返回到主类   java如何导入带有部署变量类名的静态函数?   java Spring Boot@ConfigurationProperties未从环境检索属性   java为什么API调用需要80毫秒的延迟才能到达控制器(在Google应用程序引擎中)?   XML配置中MarshallingMessageConverter中的java设置MarshallTo获取无效属性“MarshallTo”   java从群中获取facebook帖子   @ComponentScan的java excludeFilters不起作用   java将单选按钮值从一个类传递到另一个类   java使JTextArea在Swing中可滚动   java Android增强现实应用程序:将球坐标旋转到设备坐标系