我认为与适当的解决方案相关的一些背景:
我有一个有两个文件夹的服务器;一个是摄取,另一个是排序。排序文件夹的来源是摄取文件夹,所有目录都是唯一的,所有文件都是硬链接。
这样做的结果是,当摄取文件夹中删除了文件时,该文件仍保留在已排序的文件夹中,反之亦然。这使得清理几乎不可能,因为有数十万个文件,总计约 40 TB。
我有一个脚本将所有链接及其索引节点和路径名添加到数据库。然后我可以使用一些 SQL 来查找只出现一次的索引节点,并决定是否要删除它们。
这个解决方案非常慢(每次我想管理它时都需要刷新整个数据库)并且相当笨重(需要运行查询,然后通过 CLI 手动删除文件)。
是否有像 ncdu 或任何双窗格文件浏览器这样的解决方案可以显示 inode,并专门过滤 inode 的链接数量(如所示stat
)?
答案1
为什么不直接ls -li
对两个目录上的文件进行操作,然后对其进行比较?
答案2
我现在习惯于find . -type f -links +1
获取具有多个链接的所有文件,然后用于sed
使所有链接成为绝对链接,然后ncdu -X list.txt
扫描除列出的文件之外的任何文件。
这个解决方案仍然很慢,我正在寻找一个更好的解决方案,但它确实已经大大改进了我的流程,所以我将其发布为答案