利用python删除群晖中的重复文件(2)

2022-11-17 16:31:24 81点赞 709收藏 64评论

最终效果:

删除重复文件,并保留创建日期更为久远的文件

上篇文章写了,利用群晖存储空间分析器结合python来查找重复文件.经人提醒,发现完全不需要用到存储分析器.因为那个文章编辑次数到限制了.无法编辑了.只能重新开贴. 有一点小小的设置.看下图

设置路径和要删除的文件类型设置路径和要删除的文件类型

file_type是一个文件类型的列表.在里面添加你想要删除的文件类型即可.每个文件类型之间用逗号隔开.

import os

import hashlib

# 只删除以下列表中的重复文件类型.如果想删除其他类型的文件,自己添加一下就行了

file_type = ['.jpg', '.jpeg', '.png', '.gif', '.psd', '.bmp', '.webp', '.mp4', '.mkv', '.avi', '.mov', 'mpeg', 'mpg',

'.rar', '.zip']

check_files = []

def remove_reapt_files():

for root, dirs, files in os.walk(r'/volume1/homes/xxxxxx/Drive/Moments/'):

for name in files:

# print(name)

p_type = os.path.splitext(os.path.join(root, name))[1]

if p_type in file_type:

check_files.append(os.path.join(root, name))

for name in dirs:

p_type = os.path.splitext(os.path.join(root, name))[1]

if p_type in file_type:

check_files.append(os.path.join(root, name))

files_dict = {}

r_index = 0

print('Fiels Num:%s' % len(check_files))

for value in check_files:

md5_hash = hashlib.md5()

try:

with open(value, "rb+") as f:

for byte_block in iter(lambda: f.read(4096), b""):

md5_hash.update(byte_block)

file_md5 = md5_hash.hexdigest()

print('Check file MD5:%s' % value)

if files_dict.get(file_md5) is None:

files_dict[file_md5] = value

else:

d_path = files_dict[file_md5]

d_path_stats = os.stat(d_path)

file_stats = os.stat(value)

d_time = d_path_stats.st_ctime

f_time = file_stats.st_ctime

if d_time > f_time:

os.remove(d_path)

files_dict[file_md5] = value

print('Delete File:', d_path)

r_index += 1

else:

os.remove(value)

print('Delete File:', value)

r_index += 1

except Exception as e:

pass

#print('File does not exist or has been deleted')

print('File Count:%s, Repeat Files Num:%s. All deleted!' %( len(check_files),str(r_index)))

if __name__ == '__main__':

remove_reapt_files()

文件下载之后,要添加到计划任务中.

先打开群晖上的File Station 新建一个文件夹.我这边取名叫 python_shell.然后把脚本文件复制到文件夹下.

文件夹和python文件文件夹和python文件

然后打开计划任务,添加一个计划任务.执行频率.看个人喜好.运行命令就写python3 加上脚本的路径

计划任务命令计划任务命令

这样就大功告成了.看看效果吧.

效果图效果图

@eadir文件夹是群晖全局索引文件.所以删除的文件要比实际的重复要多.因为索引也删除了.

利用python删除群晖中的重复文件(2)

展开 收起
64评论

  • 精彩
  • 最新
  • 特地来评论下,是个非常好的思路,已经按照这个模式实现了我的需求。
    1、仅限用来处理photo文件夹下面的文件,所以修改了代码,不需要限制一些文件格式。同时排除了下面的带@的文件夹(猜测应该是索引);2、修改了代码按照最新的IMG_YYYYMMDD_HHMMSS格式命名,并将文件移动到对应的文件夹下面。

    校验提示文案

    提交
    另外,推荐使用sha256进行对比准确性更高一些。还有就是其实开启python多线程的话,大文件计算sha256也很快。

    校验提示文案

    提交
    收起所有回复
  • 如果文件名称不一样,但内容一样,是不是就不行了呢? [龇牙]

    校验提示文案

    提交
    不是的哦.是根据文件内容来识别的.不是根据文件名.只要内容一样.文件名无论怎么更改都可以识别到的.

    校验提示文案

    提交
    怎么对比的 md5吗

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 会不会重启后,开不了机,不懂就问啊

    校验提示文案

    提交
    你怎么会有这种想法?文件类型,你自己可以改的.目录你也可以自己改的.只要你不改成系统文件的后缀名.就没事呀.

    校验提示文案

    提交
    收起所有回复
  • 请问用于重复文件识别的文件内容,具体是什么原理?

    校验提示文案

    提交
    原理是利用MD5信息对比.

    校验提示文案

    提交
    收起所有回复
  • 大文件算md5会不会挂呢?

    校验提示文案

    提交
    不会的.大文件不是一次性读取的,是循环按照字节数读取的

    校验提示文案

    提交
    不会 很轻松~写过一个本地跑了2000个文件用了2秒~

    校验提示文案

    提交
    收起所有回复
  • 按照文章中的py命令执行了,没有任何结果,不知道什么原因,求大佬指点!

    校验提示文案

    提交
    2个原因,一个是目录没设置对,一个是文件类型缺少.

    校验提示文案

    提交
    收起所有回复
  • Fiels Num:0
    File Count:0, Repeat Files Num:0. All deleted!
    没有任何结果,请问问题出在哪里?
    是不是没有安装hashlib?

    校验提示文案

    提交
    目录你设置了吗?文件里的目录是我群晖上的目录,要改成你自己的

    校验提示文案

    提交
    目录设置了,我扫的是重复的照片,目录是/volume1/photo

    校验提示文案

    提交
    收起所有回复
  • 检查文件的md5好像有点慢,如果是大文件一个要检查好久

    校验提示文案

    提交
    你放在群晖上定期执行的话,快慢的话,要求没那么高吧.又不是一天执行N次.我测试1G以下的视频,MD5很快的.

    校验提示文案

    提交
    扫一个3w文件70g大小的文件夹花了40分钟,也还可以。还有就是这个删除是直接删除了还是会加入群晖的回收站呢?我觉得如果能加入回收站好像会更好一点

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 请教一下
    D盘的目录怎么写
    “D:\”直接替换引号内的“/volume1/homes/xxxxxx/Drive/Moments/”
    貌似也报错

    校验提示文案

    提交
    D盘根目录的话,直接就 D:\

    校验提示文案

    提交
    收起所有回复
  • if d_time > f_time改成小于是不是就能保留最新的文件了?

    校验提示文案

    提交
    是的

    校验提示文案

    提交
    收起所有回复
  • 大佬,能不能把脚本像你之前回复里面的上传一下啊,这这里面复制的用不了。谢谢

    校验提示文案

    提交
    对,同样上传下呗~这边小白不知道怎么添加这篇文章的代码

    校验提示文案

    提交
    收起所有回复
  • 看不懂,但是还是觉得很厉害,希望以后更多这类文章 [高兴]

    校验提示文案

    提交
  • 去重一时爽,翻车火葬场。 [赞一个]

    校验提示文案

    提交
    除非存储空间紧张,要不然不建议随便去重,毕竟有风险,很多系统或软件目录下不同文件夹重复文件是必要的删了就打不开了。个人保存视频软件文件数据目录可以随便搞。

    校验提示文案

    提交
    收起所有回复
  • 看不懂…… [邪恶]

    校验提示文案

    提交
  • 关注

    校验提示文案

    提交
  • 不明觉厉,收藏备用

    校验提示文案

    提交
  • 1111

    校验提示文案

    提交
  • 一头蒙(因我知识浅显),但实用的点个赞。

    校验提示文案

    提交
  • 朋友们,有谁拷贝文章中的代码,执行成功的吗?

    校验提示文案

    提交
    能执行成功 就是很慢

    校验提示文案

    提交
    收起所有回复
  • 这个好,之前都是映射到电脑上,用电脑软件扫描重复的文件,然后删除,效率不高。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
目录
709
扫一下,分享更方便,购买更轻松