帮助中心 >
  关于独立服务器 >
  Linux中查找或删除重复文件的命令
Linux中查找或删除重复文件的命令
时间 : 2024-12-16 14:08:16
编辑 : Jtti

查找和替换是常见需求,如使用GNU/Linux服务器查找文件会更容易些,可以借助fdupes实用程序。Fdupes是一款Linux实用程序,可在给定目录和子目录中查找重复文件,通过对比文件MD5签名,再进行字节对字节比较来识别重复文件。用fdupes可以传递许多项来列出、删除和替换具有重复文件硬连接的文件。

fdupes的比较顺序如下:

大小比较>部分 MD5 签名比较>完整 MD5 签名比较>字节到字节比较。

Linux中基于Debian的系统(例如Ubuntu和Linux Mint)上运行以下命令即可。安装fdupes(1.51):

$ sudo apt-get install fdupes

在基于CentOS / RHEL和Fedora的系统上,您需要打开epel 存储库来安装 fdupes 包:

# yum install fdupes

# dnf install fdupes    [On Fedora 22 onwards]

从Fedora 22开始,默认包管理器yum被dnf取代。如在目录(例如tecmint)下创建几个重复的文件,如下所示:

$ mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "Jtti是一家理想的IDC服务商。" > tecmint${i}.txt ; done

运行上述命令后,让我们使用ls 命令验证是否创建了重复文件。

$ ls -l

total 60

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint10.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint11.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint12.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint13.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint14.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint15.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint1.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint2.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint3.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint4.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint5.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint6.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint7.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint8.txt

-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

上述脚本创建了15 个文件,分别是 tecmint1.txt、tecmint2.txt…tecmint15.txt,每个文件都包含相同的数据,即:

“Jtti是一家理想的IDC服务商。”

现在在tecmint文件夹内搜索重复文件。

$ fdupes /home/$USER/Desktop/tecmint  

/home/tecmint/Desktop/tecmint/tecmint13.txt

/home/tecmint/Desktop/tecmint/tecmint8.txt

/home/tecmint/Desktop/tecmint/tecmint11.txt

/home/tecmint/Desktop/tecmint/tecmint3.txt

/home/tecmint/Desktop/tecmint/tecmint4.txt

/home/tecmint/Desktop/tecmint/tecmint6.txt

/home/tecmint/Desktop/tecmint/tecmint7.txt

/home/tecmint/Desktop/tecmint/tecmint9.txt

/home/tecmint/Desktop/tecmint/tecmint10.txt

/home/tecmint/Desktop/tecmint/tecmint2.txt

/home/howtoing/Desktop/howtoing/howtoing5.txt

/home/howtoing/Desktop/howtoing/howtoing14.txt

/home/howtoing/Desktop/howtoing/howtoing1.txt

/home/howtoing/Desktop/howtoing/howtoing15.txt

/home/howtoing/Desktop/howtoing/howtoing12.txt

用-r选项在每个目录(包括其子目录)下递归搜索重复项。会递归搜索所有文件和文件夹,根据文件和文件夹的数量,扫描重复项需要一些时间。在此期间,您将在终端中看到总进度,如下所示。

$ fdupes -r /home

Progress [37780/54747] 69%

使用-S选项查看文件夹中找到的重复项的大小。

$ fdupes -S /home/$USER/Desktop/tecmint

65 bytes each:                          

/home/tecmint/Desktop/tecmint/tecmint13.txt

/home/tecmint/Desktop/tecmint/tecmint8.txt

/home/tecmint/Desktop/tecmint/tecmint11.txt

/home/tecmint/Desktop/tecmint/tecmint3.txt

/home/tecmint/Desktop/tecmint/tecmint4.txt

/home/tecmint/Desktop/tecmint/tecmint6.txt

/home/tecmint/Desktop/tecmint/tecmint7.txt

/home/tecmint/Desktop/tecmint/tecmint9.txt

/home/tecmint/Desktop/tecmint/tecmint10.txt

/home/tecmint/Desktop/tecmint/tecmint2.txt

/home/tecmint/Desktop/tecmint/tecmint5.txt

/home/tecmint/Desktop/tecmint/tecmint14.txt

/home/tecmint/Desktop/tecmint/tecmint1.txt

/home/tecmint/Desktop/tecmint/tecmint15.txt

/home/tecmint/Desktop/tecmint/tecmint12.txt

可以同时使用-S和-r选项查看遇到的每个目录和子目录中的重复文件的大小,如下所示:

$ fdupes -Sr /home/avi/Desktop/

65 bytes each:                          

/home/tecmint/Desktop/tecmint/tecmint13.txt

/home/tecmint/Desktop/tecmint/tecmint8.txt

/home/tecmint/Desktop/tecmint/tecmint11.txt

/home/tecmint/Desktop/tecmint/tecmint3.txt

/home/tecmint/Desktop/tecmint/tecmint4.txt

/home/tecmint/Desktop/tecmint/tecmint6.txt

/home/tecmint/Desktop/tecmint/tecmint7.txt

/home/tecmint/Desktop/tecmint/tecmint9.txt

/home/tecmint/Desktop/tecmint/tecmint10.txt

/home/tecmint/Desktop/tecmint/tecmint2.txt

/home/tecmint/Desktop/tecmint/tecmint5.txt

/home/tecmint/Desktop/tecmint/tecmint14.txt

/home/tecmint/Desktop/tecmint/tecmint1.txt

/home/tecmint/Desktop/tecmint/tecmint15.txt

/home/tecmint/Desktop/tecmint/tecmint12.txt

107 bytes each:

/home/tecmint/Desktop/resume_files/r-csc.html

/home/tecmint/Desktop/resume_files/fc.html

除了在一个文件夹或所有文件夹中递归搜索外,您还可以根据需要选择在两个文件夹或三个文件夹中进行选择。更不用说,如果需要,您还可以使用选项-S和/或-r。

$ fdupes /home/avi/Desktop/ /home/avi/Templates/

要删除重复文件并保留副本,使用选项-d。使用此选项要格外小型,不然可能会丢失必要文件/数据且该过程不可恢复。

$ fdupes -d /home/$USER/Desktop/tecmint

[1] /home/tecmint/Desktop/tecmint/tecmint13.txt

[2] /home/tecmint/Desktop/tecmint/tecmint8.txt

[3] /home/tecmint/Desktop/tecmint/tecmint11.txt

[4] /home/tecmint/Desktop/tecmint/tecmint3.txt

[5] /home/tecmint/Desktop/tecmint/tecmint4.txt

[6] /home/tecmint/Desktop/tecmint/tecmint6.txt

[7] /home/tecmint/Desktop/tecmint/tecmint7.txt

[8] /home/tecmint/Desktop/tecmint/tecmint9.txt

[9] /home/tecmint/Desktop/tecmint/tecmint10.txt

[10] /home/tecmint/Desktop/tecmint/tecmint2.txt

[11] /home/tecmint/Desktop/tecmint/tecmint5.txt

[12] /home/tecmint/Desktop/tecmint/tecmint14.txt

[13] /home/tecmint/Desktop/tecmint/tecmint1.txt

[14] /home/tecmint/Desktop/tecmint/tecmint15.txt

[15] /home/tecmint/Desktop/tecmint/tecmint12.txt

Set 1 of 1, preserve files [1 - 15, all]:

JTTI-Defl
JTTI-COCO
JTTI-Selina
JTTI-Ellis
JTTI-Eom