ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

文件重名陷阱:如何安全整理目录

文件重名陷阱:如何安全整理目录 在整理目录的时候, 其中有一个非常危险的操作, 那就是看到名字完全一样的文件就立即将其覆盖掉。这是因为不同的设备可能会生成内容相同但编号也相同的文件, 而且同一个文件也可能被存放于不同的子目录里面。如果我们先把那些重名的项目全都列出来, 然后再去思考应当怎么去处理它们, 那么整个整理过程就会方便许多核对工作。接下来我们要介绍一个只用于读取文件信息的例子, 这个示例的做法绝对不会执行诸如删除、移动或者重命名之类的动作。从一个小目录开始你先要选择一个文件数量并不多的目录, 比如临时收集的照片副本。不要在一开始的时候就扫描整块系统盘: 因为目录范围太大了, 这会让结果变得难以检查, 也更有可能让你遇到那些没有读取权限的文件夹。在扫描的过程当中, 你要尽量的暂停其他软件对目录的写入操作, 从而避免一边生成清单、一边又发生内容变化的情况出现。用文件名分组可以使用标准库中的方法来遍历路径, 并使用特定功能来收集同名项目。在下面这个例子里面, 程序会保留文件的扩展名, 并且按照文件的原名来进行分组处理。这种做法不会对大小写不同的名称进行强制合并的操作。在不同的文件系统之间使用的时候, 必须对这一点保持特别注意的意识。from pathlib import Pathfrom collections import defaultdictroot Path(sample_files)groups defaultdict(list)if not root.is_dir():raise SystemExit(请先准备 sample_files 示例目录)for path in root.rglob(*):if path.is_file() and not path.is_symlink():groups[path.name].append(path.relative_to(root))for name, paths in sorted(groups.items()):if len(paths) 1:print(name)for relative_path in sorted(paths):print( , relative_path)在启动运行之前, 你需要把示例中用的那个目录名称换成你自己已经准备好的文件夹的名字, 或者也可以选择在脚本所在的地方新建立一个文件夹。最终的输出结果只会列出那些出现了不止一次的文件名字, 并且同时还要显示出这些文件具体存放于根目录下面的哪个位置。需要特别注意的是, 如果屏幕上没有任何内容显示出来, 这并不代表你整个的文件夹里一定不存在任何重复的文件内容, 它的真实含义仅仅是这次扫描的过程没有发现任何符合你所设定分组条件的相同文件名的文件。相对路径比单独的名字更有用可以假设这两个设备都生成了后缀为 jpg 的图片文件, 这样的话, 如果仅仅去观察这些文件的名称, 我们就无法把它们区分开来。因此, 必须保留手机A的相对路径与相机B的相对路径这样的信息, 只有这样做我们才知道每一份文件具体是来自于哪一个地方。使用相对路径也变得更加方便, 因为这样可以伴随着目录一起进行交接任务,同时并不需要把个人的用户名或是电脑的盘符信息写入到公开的说明文档当中去。在扫描实际工作目录的时候, 还应当把那些读不了、扫着扫着就没了或者权限不给的情况也考虑进去。这个简单的例子仅仅是用来给大家展示一下怎么分组的, 正式的批量处理工具可是必须得清清楚楚地把这些异常情况给记下来。绝对不能让被跳过去的那些东西被偷偷摸摸地当成是已经检查过的情况发生, 也更不能仅仅凭着没有报错这事儿就去瞎说所有的文件都是一致的。同名与重复内容是两回事有时候名字一样的东西, 对应的照片可能是完全不同的两种东西, 可是名字不一样的东西, 也可能指代同一份文件。咱们用名称检查这个方法, 主要是为了发现那些整理起来有冲突的情况。文件大小可以拿来初步筛选一下。对于那些看起来稳定的文件, 我们可以计算一下它的SHA-256摘要, 这样能够进一步去比较字节内容到底是啥样子。这三种检查的目的各不相同, 所以千万不该随便把其中任何一项直接当作要把它删掉的理由。在实际需要对内容进行判定的时候, 最好是能够从每一个组别的文件列表当中挑选出一些具有代表性的样本, 并且把它们打开让眼睛去查看。因为那些照片可能会遭受裁切的处理, 那些视频可能会被重新编码加工成另一种格式, 而那些文档可能内部包含了各种不同的修订痕迹。这些隐藏在背后的差异状况未必能够通过肉眼观察缩略图或者看一眼文件的名称就清晰地看出来。在决定先进行比较操作之前, 必须要把心里的那个困惑解开弄清楚, 究竟是要完整地保存下来这些文件的原始最初版本呢, 还是说准备制作出专门用来对外分享的最终版本。把检查和修改分开执行你先去把清单存下来, 然后靠人工的方式去确认并整理好那个计划, 在最后一步才动手去执行文件的移动或者重命名这个动作。对于非常重要的那些资料, 你一定得留一份单独的副本出来。在整理工作全都做完以后, 要随机地挑出几份文件来, 看着那份清单把它们重新找出来并且打开看看。这么做一方面可以让你验证清楚新的目录结构到底好不好用, 另外一方面也能帮你发现清楚在整个整理的过程当中, 是不是有丢失掉来源线索的情况出现。需要在此处说明的是, 这篇文章的内容是基于人工智能技术进行辅助完成的。代码的作用仅仅是在演示方面供参考使用。配图是由作者自行制作的用于解释的图形。至于示例中提到的目录以及文件名这些信息, 全都是经过虚构处理的, 并不存在对应的真实情况。
返回列表