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

时间:2020-03-05 15:26:47  来源:igfitidea点击:

今天我们要学习如何在Linux PC或者服务器上查找和删除重复文件。
所以,这里的工具可以根据需求和舒适,我们可以使用任何人。

无论我们是桌面还是服务器上的Linux,都有很好的工具,将扫描系统以获取复制文件,并将其删除以释放空间。
稳定图形和命令行接口都可用。
重复文件是不必要的磁盘空间浪费。
毕竟,如果我们真的需要在两个不同的位置中需要相同的文件,我们可以始终设置符号链接或者硬链接,仅在磁盘上的一个位置存储数据。

1)FSLint.

FSLINT在各种Linux发行版二进制存储库中提供,包括Ubuntu,Debian,Fedora和Red Hat。

只需触发包管理器并安装"FSLINT"包。
此实用程序默认提供了一个方便的图形界面,它还包括其各种功能的命令行版本。

但是,不要让我们远离使用FSLINT的方便的图形界面。
默认情况下,它将打开与"重复窗格"窗格和"主目录"打开,作为默认搜索路径。

安装

要安装fslint,正如我正在运行的Ubuntu,这是默认命令:

# apt-get install fslint

但这里是其他Linux发行版的安装命令:

debian:

# svn checkout http://fslint.googlecode.com/svn/trunk/fslint-2.45
# cd fslint-2.45
# dpkg-buildpackage -I.svn -rfakeroot -tc
# dpkg -i ../fslint_2.45-1_all.deb

Fedora:

# yum install fslint

对于OpenSuse:

# [ -f /etc/mandrake-release ] && pkg=rpm
# [ -f /etc/SuSE-release ] && pkg=packages
# wget http://www.pixelbeat.org/fslint/fslint-2.42.tar.gz
# rpmbuild -ta fslint-2.42.tar.gz
# rpm -Uvh /usr/src/$pkg/RPMS/noarch/fslint-2.42-1.*.noarch.rpm

对于其他发行版:

# wget http://www.pixelbeat.org/fslint/fslint-2.44.tar.gz
# tar -xzf fslint-2.44.tar.gz
# cd fslint-2.44
# (cd po && make)
# ./fslint-gui

运行fslint.

要在Ubuntu中运行GUI版本的FSLINT-GUI,请运行命令(ALT + F2)或者终端:

$fslint-gui

默认情况下,它将打开与"重复窗格"窗格和"主目录"打开,作为默认搜索路径。
我们所要做的就是点击"查找"按钮,FSLINT将在主文件夹下的目录中找到一份重复文件列表。

使用按钮删除要删除的任何文件,然后双击它们以预览它们。

最后,你完成了。
欢呼声,我们已成功从系统中删除重复文件。

请注意,默认情况下,命令行实用程序不在路径中,因此无法像典型命令一样运行它们。

在Ubuntu上,我们将在/usr/share/fslint/fslint下找到它们。因此,如果要在单个目录上运行整个FSLINT扫描,则此处是我们在Ubuntu上运行的命令:CD /usr/share/fslint/fslint./fslint/path/to/directorythis命令实际上删除任何内容。它只打印一份重复文件列表 - 我们可以为其其余的文件。

$/usr/share/fslint/fslint/findup --help
 find dUPlicate files.
 Usage: findup [[[-t [-m|-d]] | [--summary]] [-r] [-f] paths(s) ...]
 If no path(s) specified then the current directory is assumed.
  
 When -m is specified any found duplicates will be merged (using hardlinks).
 When -d is specified any found duplicates will be deleted (leaving just 1).
 When -t is specified, only report what -m or -d would do.
 When --summary is specified change output format to include file sizes.
 You can also pipe this summary format to /usr/share/fslint/fslint/fstool/dupwaste
 to get a total of the wastage due to duplicates.

2)FDUPES.

FDUPES是用于识别或者删除驻留在Adrian Lopez编写的指定目录内的重复文件的程序。
我们可以查看GitHub项目。

安装fdupes.

要安装fdupes,请按照以下操作:

在CentOS 7:

# yum install fdupes
Loaded plugins: fastestmirror
base                                                                                                                           | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                                                                           |  12 kB  00:00:00     
epel                                                                                                                           | 4.3 kB  00:00:00     
extras                                                                                                                         | 3.4 kB  00:00:00     
updates                                                                                                                        | 3.4 kB  00:00:00     
(1/2): epel/x86_64/updateinfo                                                                                                  | 817 kB  00:00:00     
(2/2): epel/x86_64/primary_db                                                                                                  | 4.8 MB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.linode.com
 * epel: fedora-epel.mirrors.tds.net
 * extras: mirrors.linode.com
 * updates: mirrors.linode.com
Resolving Dependencies
--> Running transaction check
---> Package fdupes.x86_64 1:1.6.1-1.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================================================================
 Package                           Arch                              Version                                    Repository                       Size
======================================================================================================================================================
Installing:
 fdupes                            x86_64                            1:1.6.1-1.el7                              epel                             28 k

在Ubuntu 16.04上:

# apt install fdupes
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following packages were automatically installed and are no longer required:
 libdvdnav4 libdvdread4 libenca0 libguess1 librubberband2v5 libsdl2-2.0-0 libsndio6.1 libva-wayland1 libva-x11-1 mpv rtmpdump
Use 'sudo apt autoremove' to remove them.

搜索重复的文件

FDUPES命令在指示的文件夹中搜索重复项。
语法如下

fdupes [ options ] DIRECTORY

让我们创建一些重复的文件。
我们将创建一个包含相同内容的文件夹和10个文件

# mkdir labor && for i in {1..10}; do echo "Hello, let us try fdupes command" > labor/drago${i} ; done
# mkdir labor/package && for i in {1..10}; do echo "Hello, let us try fdupes recursively" > labor/package/pack${i} ; done

让我们检查结果

# ls -lR labor/
labor/:
total 44
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago10
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago1
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago2
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago3
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago4
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago5
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago6
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago7
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago8
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago9
drwxr-xr-x 2 root root 4096 Sep  9 23:51 package
labor/package:
total 40
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack10
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack1
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack2
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack3
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack4
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack5
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack6
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack7
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack8
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack9

我们看到我们所有的文件都存在。
现在我们可以搜索如下所述的重复文件

# fdupes labor/
labor/drago8
labor/drago2
labor/drago7
labor/drago5
labor/drago1
labor/drago3
labor/drago4
labor/drago10
labor/drago6
labor/drago9

我们可以看到我们拥有上面列出的所有10个重复文件。

递归搜索重复文件并显示大小

我们已经看到上面的结果不显示劳动/包目录中早期创建的重复文件。
要将重复的文件搜索到目录及其子目录中,我们使用选项-r,我们可以看到每个重复文件的大小,如下图所示的-s参数

# fdupes -rS labor
33 bytes each:                          
labor/drago8
labor/drago2
labor/drago7
labor/drago5
labor/drago1
labor/drago3
labor/drago4
labor/drago10
labor/drago6
labor/drago9
37 bytes each:
labor/package/pack10
labor/package/pack6
labor/package/pack4
labor/package/pack7
labor/package/pack1
labor/package/pack3
labor/package/pack5
labor/package/pack2
labor/package/pack8
labor/package/pack9

因此,我们可以理解重复的文件具有相同的大小如此相同的内容。

在研究重复文件时,可以省略第一个文件

删除重复的文件

要删除重复的文件,我们使用"-d"参数"。
FDUPES会询问保留哪些文件

# fdupes -rd labor/
[1] labor/drago8
[2] labor/drago2
[3] labor/drago7
[4] labor/drago5
[5] labor/drago1
[6] labor/drago3
[7] labor/drago4
[8] labor/drago10
[9] labor/drago6
[10] labor/drago9
Set 1 of 2, preserve files [1 - 10, all]: 1
   [+] labor/drago8
   [-] labor/drago2
   [-] labor/drago7
   [-] labor/drago5
   [-] labor/drago1
   [-] labor/drago3
   [-] labor/drago4
   [-] labor/drago10
   [-] labor/drago6
   [-] labor/drago9
[1] labor/package/pack10
[2] labor/package/pack6
[3] labor/package/pack4
[4] labor/package/pack7
[5] labor/package/pack1
[6] labor/package/pack3
[7] labor/package/pack5
[8] labor/package/pack2
[9] labor/package/pack8
[10] labor/package/pack9
Set 2 of 2, preserve files [1 - 10, all]: 8
   [-] labor/package/pack10
   [-] labor/package/pack6
   [-] labor/package/pack4
   [-] labor/package/pack7
   [-] labor/package/pack1
   [-] labor/package/pack3
   [-] labor/package/pack5
   [+] labor/package/pack2
   [-] labor/package/pack8
   [-] labor/package/pack9

我们可以检查如下结果。

# ls -lR labor/
labor/:
total 8
-rw-r--r-- 1 root root   33 Sep  9 23:51 drago8
drwxr-xr-x 2 root root 4096 Sep 10 00:07 package
labor/package:
total 4
-rw-r--r-- 1 root root 37 Sep  9 23:51 pack2

我们可以看到我们保留了Drago8和Pack2文件