答案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
的组合列出输出中未包含的文件。find
grep
以下示例列出了 特有的文件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 连接和多个文件夹中使用。
答案3
我认为将旧备份与数千个文件合并的最佳工作流程是使用dupeGuru毕竟。它看起来很像重复标签来自FSlint但它还有一个额外的重要功能,即添加来源'参考'。
- 添加您的目标目录(例如
~/Documents
)作为参考。- A参考是只读的,不会删除任何文件
- 将备份目录添加为普通的。
- 查找重复项。删除从备份中找到的所有重复项。
- 备份目录中只剩下唯一的文件。使用免费文件同步或者融合合并这些,或者手动合并。
如果您有多个旧备份目录,则首先合并最新的备份目录是有意义的,然后使用此备份目录作为参考在将旧备份合并到主文档目录之前,清除旧备份中的重复项。这可以保护很多您不必删除要丢弃的唯一文件,而是从备份中合并。
请记住,在销毁所有旧备份后进行全新备份。:)
答案4
jdupes
为此有两个有用的选项:-I --isolate
和-u --print-unique
。
例如,仅列出backup
目录中的唯一文件:
jdupes -Iru Documents backup |grep '^backup