删除重复的文件,但前提是它们位于同一文件夹中?

删除重复的文件,但前提是它们位于同一文件夹中?

我已经阅读了常见问题解答并且我知道这几乎被关闭了,因为要求产品推荐......

我查看了至少 40 个“重复文件”删除实用程序(Windows、OSX 和 Linux),但没有一个具有我想要的特定功能。

我现在需要知道是否有什么东西可以做到这一点,或者我是否必须为此编写自己的工具。

对我来说,只要回答“是的,它存在”就行了。
这意味着我搜索得还不够努力。

我需要的功能:删除大型文件夹结构中的重复文件,但前提是这些重复文件位于同一个文件夹中。
例如,我有相同的文件 A、B 和 C。A 和 C 位于同一个文件夹中。B 位于另一个文件夹中。需要删除 A 或 C(无偏好),但应保留 B。

有什么可以做到这一点吗?
(最好是 Windows,但 OS-X 或 Linux 也可以。)

答案1

您可以使用fdupeswithout,-r这样它就不会下降到子目录。这将打印重复文件的列表:

find . -type d -exec fdupes -n {} \;

-n忽略空文件。添加-dN( --delete --noprompt) 可删除除第一个重复文件之外的所有文件。

您可以使用fdupes在 OS X 上安装brew install fdupes

答案2

正如我所说的,我编写了一个 Python 脚本来执行这一操作。

我曾在Google 代码并且我已经将其作为 GPL v3 开源,所以我认为任何想要改进该程序的人都可以这样做。

我也对其进行了一些调试(在 Windows 中创建了数十个文件,删除了所有文件,只留下原始文件)。代码注释很详细,可以让任何人了解代码的实际功能。

我已经在 Python 3.3 上运行它,但我认为它应该可以与最新的 Python 2 一起使用。

哦,最好的部分是,它应该可以在 Python 支持的任何操作系统上运行(Windows、OSX、Linux ......)

答案3

这是一种缓慢但可靠且非常简单的方法,可以在 OSX 和 Linux 上运行。我假设您对您电脑中的重复文件感兴趣,$HOME但您可以根据需要进行更改。

其思路是先找到所有目录的列表,然后比较其中的文件并删除所有相同的文件。正如我所说,这非常简单,因此它只会保留任何一对文件中的第一个文件并删除其余文件,而不会发出任何警告。

这将打印出重复项,但是不会做出任何改变到你的文件:

find $HOME  -mindepth 1 -type d | while read dir; do 
  find $dir -type -f -exec md5sum {} \; | sort > md5sums;
  gawk '{print $1}' md5sums | sort | uniq -d > dupes;
  while read d; do 
    echo "---"; grep -w $d md5sums | cut -d ' ' -f 2-;
  done < dupes
done; rm dupes md5sum 

这一个将默默地删除重复的文件,只有当你确定可以时才运行它

find $HOME  -mindepth 1 -type d | 
while read dir; do 
  find $dir -type -f -exec md5sum {} \; | sort > md5sums;
  gawk '{print $1}' md5sums | sort | uniq -d |
  while read d; do grep -w $d md5sums | cut -d ' ' -f 2- | tail -n +2; done |
  | xargs rm ; 
done; rm dupes md5sum 

注意事项:这很慢,实际上很慢,不会发出警告,并且会默默删除文件。好的一面是,只有当这些文件位于同一目录中时,它才会这样做,这正是您想要的。

相关内容