如何在Unix系统中查找重复文件?


引言

随着我们越来越依赖数字媒体来存储重要文件,我们往往会随着时间的推移积累大量文件。管理这些文件可能具有挑战性,尤其是在我们拥有多个相同文件的副本时,这些副本会占用存储空间。为了解决这个问题,Unix提供了几种查找和删除重复文件的方法,从而节省我们的时间和磁盘空间。

在本文中,我们将探讨在Unix中查找重复文件的各种方法,并演示可用于每种方法的终端命令。通过这些不同的方法,我们可以根据需要管理的数据类型和数量,选择最适合我们需求和偏好的方法。

使用fdupes查找重复文件

这是一个终端工具,允许我们递归地在目录树中查找重复文件。该工具在大多数类Unix系统上可用。

打开终端窗口并导航到要扫描重复文件的目录:

$ cd Desktop/duplicate

然后,键入命令运行fdupes并查找重复文件:

fdupes -r . 

-r选项告诉fdupes反复扫描当前目录及其子目录。“.”将当前目录定义为搜索的起点。运行命令后,fdupes将查看目录树中的所有文件,并返回相同文件的列表。

./folder2/hello.txt                           
./folder1/hello.txt
./folder3/hello.txt

使用jdupes查找重复文件

这是一个命令行工具,用于识别和管理重复文件。它根据名称、大小、修改时间和内容等各种标准比较文件,即使文件名称不同或位于不同的目录中,也能识别重复文件。jdupes是fdupes工具的更高级版本。

要在终端中使用它,请键入以下命令:

$ jdupes -r .

这里,-r选项指示jdupes扫描当前目录及其子目录。“.”在本例中由“.”大小定义为起点。运行命令后,它将扫描目录中的所有文件,只打印相同的文件。

Scanning: 9 files, 4 items (in 1 specified)
** scanning files **
./folder1/hello.txt                                               
./folder2/hello.txt
./folder3/hello.txt

使用Awk工具查找重复文件

名为“awk”的实用程序是一个非常强大的工具,可以查找相同的文件。我们可以用它快速扫描目录结构,查找具有相似名称的文件,并显示它们及其路径。

$ awk -F'/' '{
   f = $NF
   arr[f] = f in arr? arr[f] RS $0 : $0
   bb[f]++ } 
   END{for(x in bb)
      if(bb[x]>1)
      printf "Name of duplicate files: %s 
% s
", x,arr[x] }'<(find . -type f)

此脚本使用正斜杠作为分隔符扫描每个文件路径,使用$NF获取文件名,并测试它是否存在于“arr”中。如果存在,则添加路径,“bb”集合计算每个文件名出现的次数。

Name of duplicate files: unique.txt

./folder2/unique.txt
./folder1/unique.txt
./folder3/unique.txt

Name of duplicate files: hello.txt

./folder2/hello.txt

./folder1/hello.txt

./folder3/hello.txt

使用Awk按大小查找重复文件

我们还可以使用此awk实用程序查找大小相同的文件,因为重复文件的大小相同。

$ awk '{
   fsize = $1
   fpath[fsize] = fsize in fpath ? fpath[fsize] RS $2 : $2
   count[fsize]++ 
} 
END{for(size in count)
   if(count[size]>1) 
      printf "Using the awk to find Duplicate files by size: %d  bytes
%s
",size,fpath[size] }' <(find . -type f -exec du -b {} +)

这将获取每个文件的大小并将其保存在“fsize”变量中。如果此大小已出现在“fpath”数组中,它会将当前文件路径附加到现有路径集合中。count数组记录每个文件大小出现的次数。最后的命令循环遍历count数组并打印相同文件的名称。

Using the awk to find Duplicate files by size: 13 bytes

./folder2/unique.txt
./folder3/unique.txt
 ** many more duplicate files**

 Using the awk to find Duplicate files by size: 20 bytes

./folder2/hello.txt
./folder1/hello.txt
./folder3/hello.txt

结论

从本文中,我们了解到Unix操作系统提供了多种有效的方法来查找和删除重复文件,例如使用fdupes、jdupes、awk和find命令等命令行工具。通过使用这些方法,我们可以有效地管理我们的文件并节省宝贵的磁盘空间。

更新于:2023年5月8日

1K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告