📜  如何在 Linux 上查找和删除重复文件?(1)

📅  最后修改于: 2023-12-03 15:38:19.865000             🧑  作者: Mango

如何在 Linux 上查找和删除重复文件?

在使用Linux系统时,由于相同文件的存在和不断复制,可能会产生大量的重复文件。这些文件占用了宝贵的存储空间,也会使文件管理和维护工作变得繁琐。因此,找到和删除这些重复文件非常必要。

1. 查找重复文件
基于文件名查找重复文件

基于文件名查找重复文件是一种简单而快速的方法。通过使用find命令,我们可以轻松地查找指定目录中的相同文件名。

$ find /path/to/directory -type f -not -empty -printf '%s\n' | sort -rn | uniq -d | xargs -I{} -n1 find /path/to/directory -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

这个命令使用了几个其他命令。让我们逐步解释每个命令的作用:

  • find /path/to/directory -type f -not -empty -printf '%s\n'` :查找目录中所有非空文件,并按大小排序输出。
  • sort -rn:将输出结果按文件大小的倒序排序。
  • uniq -d:查找输出结果中重复的文件大小。
  • xargs -I{} -n1 find /path/to/directory -type f -size {}c -print0:查找指定目录中指定大小(与前面的输出结果匹配)的文件,并按文件名列表输出。
  • xargs -0 md5sum:计算MD5散列值以找到重复的文件。
  • sort | uniq -w32 --all-repeated=separate:通过比较计算的MD5散列来找到重复文件,这个命令将输出所有重复的文件,每组一个新的行。
基于文件内容(散列值)查找重复文件

另一种查找重复文件的方法是基于文件内容(散列值)的查找。使用基于文件内容查找重复文件时,供选中常使用的命令是fdupes。

$ fdupes -r /path/to/directory

这个命令可以查找指定目录中的所有重复文件。使用 -r 表示对子目录进行递归操作。

2. 删除重复文件
删除基于文件名查找到的重复文件

如果只是基于文件名查找到了重复文件,那么可以手动删除它们或使用以下命令:

$ find /path/to/directory -type f -not -empty -printf '%s\n' | sort -rn | uniq -d | xargs -I{} -n1 find /path/to/directory -type f -size {}c -print0 | xargs -0 rm -v

这个命令的解释与查找相同,只不过最后用 rm -v 代替了 md5sum

删除基于文件内容(散列值)查找到的重复文件

使用fdupes查找到的重复文件可以使用以下命令删除:

$ fdupes -rd /path/to/directory

如果你不想手动确认每个文件的删除,可以添加 -d 选项来自动删除重复文件。

总之,在Linux上查找和删除重复文件是一项必要的任务。通过应用上面列出的方法,可以更高效地执行这些任务,以提高工作效率并为系统腾出更多的空间!