如何在单独的目录中查找没有重复的文件

如何在单独的目录中查找没有重复的文件

我有一个旧的文档备份。在我的当前Documents目录中,有很多这样的文件在不同的地方用不同的名称。我正在尝试找到一种方法来显示备份中存在哪些文件不是存在于Documents目录中,最好是美观且具有 GUI 的,这样我就可以轻松概览很多的文件。

当我搜索这个问题时,很多人都在寻找相反的方法。有这样的工具FSlint杜佩古鲁,但它们显示重复项。没有反转模式。

答案1

如果您准备使用 CLI,则以下命令应该适合您:

diff --brief -r backup/ documents/

这将显示每个文件夹所特有的文件。如果您愿意,还可以使用--ignore-file-name-case

举个例子:

ron@ron:~/test$ ls backup/
file1  file2  file3  file4  file5
ron@ron:~/test$ ls documents/
file4  file5  file6  file7  file8
ron@ron:~/test$ diff backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8
ron@ron:~/test$ diff backup/ documents/ | grep "Only in backup"
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3

此外,如果您只想报告文件不同之处(而不是报告实际的“差异”),您可以使用--brief如下选项:

ron@ron:~/test$ cat backup/file5 
one
ron@ron:~/test$ cat documents/file5
ron@ron:~/test$ diff --brief backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Files backup/file5 and documents/file5 differ
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8

有几种类似的可视化差异工具meld可以做同样的事情。您可以meld通过以下方式从 Universe 存储库安装:

sudo apt-get install meld

并使用其“目录比较”选项。选择要比较的文件夹。选择后,您可以并排比较它们:

在此处输入图片描述

fdupes是一款出色的程序,可以查找重复文件,但它不会列出非重复文件,而这正是您要查找的。但是,我们可以使用和fdupes的组合列出输出中未包含的文件。findgrep

以下示例列出了 特有的文件backup

ron@ron:~$ tree backup/ documents/
backup/
├── crontab
├── dir1
│   └── du.txt
├── lo.txt
├── ls.txt
├── lu.txt
└── notes.txt
documents/
├── du.txt
├── lo-renamed.txt
├── ls.txt
└── lu.txt

1 directory, 10 files
ron@ron:~$ fdupes -r backup/ documents/ > dup.txt
ron@ron:~$ find backup/ -type f | grep -Fxvf dup.txt 
backup/crontab
backup/notes.txt

答案2

我遇到了很多非常大的文件的相同问题,并且有很多针对重复的解决方案,但没有针对反向搜索的解决方案,并且由于数据量太大,我也不想搜索内容差异。

所以我写了这个python脚本来搜索“isolated-files”

isolated-files.py --source folder1 --target folder2

这将显示文件夹 2 中所有不在文件夹 1 中的文件(也是递归的)。也可以在 ssh 连接和多个文件夹中使用。

https://github.com/ezzra/isolated-files

答案3

我认为将旧备份与数千个文件合并的最佳工作流程是使用dupeGuru毕竟。它看起来很像重复标签来自FSlint但它还有一个额外的重要功能,即添加来源'参考'

  1. 添加您的目标目录(例如~/Documents)作为参考
    • A参考是只读的,不会删除任何文件
  2. 将备份目录添加为普通的
  3. 查找重复项。删除从备份中找到的所有重复项。
  4. 备份目录中只剩下唯一的文件。使用免费文件同步或者融合合并这些,或者手动合并。

如果您有多个旧备份目录,则首先合并最新的备份目录是有意义的,然后使用此备份目录作为参考在将旧备份合并到主文档目录之前,清除旧备份中的重复项。这可以保护很多您不必删除要丢弃的唯一文件,而是从备份中合并。

请记住,在销毁所有旧备份后进行全新备份。:)

答案4

jdupes为此有两个有用的选项:-I --isolate-u --print-unique

例如,仅列出backup目录中的唯一文件:

jdupes -Iru Documents backup |grep '^backup

相关内容