我有两个大型目录树——想想多年来为一家代理机构所做的客户工作。一个目录树很旧,已经过时;另一个目录树更大,目前仍在使用。我想删除前者,但我想确保后者确实是它的超集(我怀疑前者是后者的一个旧档案或早期版本,被粗心地复制并从未删除过)。
使用 diff 的常规配置会产生太多的输出,因为它会告诉我两个目录树之间的所有差异。我想知道的是我可以运行什么命令来找出较小、较旧的树上有哪些文件(如果有的话),而较大、较新的树上也没有这些文件。
顺便说一句,我在 Windows 上运行 cygwin——不确定这是否重要。如果有人建议改用 Windows 实用程序,那也没问题。
答案1
无可比拟确实,对于这种类型的任务来说,无与伦比。它使目录比较变得微不足道。它会在视图中显示文件,然后您可以在其中选择它们并将它们复制到其他地方,或复制到较新的树中。
如果您的数据集正如您所怀疑的那样,它只会在旧的一面显示一个空视图,并且您知道您不需要做任何事情。
答案2
Robocopy正是您想要的 Windows 实用程序。
robocopy.exe <your old dir tree> <your new dir tree> /COPYALL /L
您可以添加其他选项,但请确保 /L 存在,否则它实际上会合并两棵树,而不仅仅是比较差异。
答案3
olddir$ for file in $(find -type f); do [ -e $NEWDIR/$file ] || echo "$file is missing in NEWDIR"; done