如何在Linux上查找和删除重复文件
今天我们要学习如何在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文件