我已经阅读了常见问题解答并且我知道这几乎被关闭了,因为要求产品推荐......
我查看了至少 40 个“重复文件”删除实用程序(Windows、OSX 和 Linux),但没有一个具有我想要的特定功能。
我现在需要知道是否有什么东西可以做到这一点,或者我是否必须为此编写自己的工具。
对我来说,只要回答“是的,它存在”就行了。
这意味着我搜索得还不够努力。
我需要的功能:删除大型文件夹结构中的重复文件,但前提是这些重复文件位于同一个文件夹中。
例如,我有相同的文件 A、B 和 C。A 和 C 位于同一个文件夹中。B 位于另一个文件夹中。需要删除 A 或 C(无偏好),但应保留 B。
有什么可以做到这一点吗?
(最好是 Windows,但 OS-X 或 Linux 也可以。)
答案1
您可以使用fdupes
without,-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
注意事项:这很慢,实际上很慢,不会发出警告,并且会默默删除文件。好的一面是,只有当这些文件位于同一目录中时,它才会这样做,这正是您想要的。