新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 软件技术 > 操作系统 > linux

如何在 Linux 上识别同样内容的文件

时间:2019-06-11 10:01:33  来源:  作者:
如何在 Linux 上识别同样内容的文件

 

有时文件副本相当于对硬盘空间的巨大浪费,并会在你想要更新文件时造成困扰。以下是用来识别这些文件的六个命令。

-- Sandra Henry-stocker(作者)

在最近的帖子中,我们看了 如何识别并定位硬链接的文件 (即,指向同一硬盘内容并共享 inode)。在本文中,我们将查看能找到具有相同内容,却不相链接的文件的命令。

硬链接很有用是因为它们能够使文件存放在文件系统内的多个地方却不会占用额外的硬盘空间。另一方面,有时文件副本相当于对硬盘空间的巨大浪费,在你想要更新文件时也会有造成困扰之虞。在本文中,我们将看一下多种识别这些文件的方式。

用 diff 命令比较文件

可能比较两个文件最简单的方法是使用 diff 命令。输出会显示你文件的不同之处。< 和 > 符号代表在当参数传过来的第一个(<)或第二个(>)文件中是否有额外的文字行。在这个例子中,在 backup.html 中有额外的文字行。

$ diff index.html backup.html
2438a2439,2441
> <pre>
> That's all there is to report.
> </pre>

如果 diff 没有输出那代表两个文件相同。

$ diff home.html index.html
$

diff 的唯一缺点是它一次只能比较两个文件并且你必须指定用来比较的文件,这篇帖子中的一些命令可以为你找到多个重复文件。

使用校验和

cksum(checksum) 命令计算文件的校验和。校验和是一种将文字内容转化成一个长数字(例如2819078353 228029)的数学简化。虽然校验和并不是完全独有的,但是文件内容不同校验和却相同的概率微乎其微。

$ cksum *.html
2819078353 228029 backup.html
4073570409 227985 home.html
4073570409 227985 index.html

在上述示例中,你可以看到产生同样校验和的第二个和第三个文件是如何可以被默认为相同的。

使用 find 命令

虽然 find 命令并没有寻找重复文件的选项,它依然可以被用来通过名字或类型寻找文件并运行 cksum 命令。例如:

$ find . -name "*.html" -exec cksum {} ;
4073570409 227985 ./home.html
2819078353 228029 ./backup.html
4073570409 227985 ./index.html

使用 fslint 命令

fslint 命令可以被特地用来寻找重复文件。注意我们给了它一个起始位置。如果它需要遍历相当多的文件,这就需要花点时间来完成。注意它是如何列出重复文件并寻找其它问题的,比如空目录和坏 ID。

$ fslint .
-----------------------------------file name lint
-------------------------------Invalid utf8 names
-----------------------------------file case lint
----------------------------------DUPlicate files <==
home.html
index.html
-----------------------------------Dangling links
--------------------redundant characters in links
------------------------------------suspect links
--------------------------------Empty Directories
./.gnupg
----------------------------------Temporary Files
----------------------duplicate/conflicting Names
------------------------------------------Bad ids
-------------------------Non Stripped executables

你可能需要在你的系统上安装 fslint。你可能也需要将它加入你的命令搜索路径:

$ export PATH=$PATH:/usr/share/fslint/fslint

使用 rdfind 命令

rdfind 命令也会寻找重复(相同内容的)文件。它的名字意即“重复数据搜寻”,并且它能够基于文件日期判断哪个文件是原件——这在你选择删除副本时很有用因为它会移除较新的文件。

$ rdfind ~
Now scanning "/home/shark", found 12 files.
Now have 12 files in total.
Removed 1 files due to nonunique device and inode.
Total size is 699498 bytes or 683 KiB
Removed 9 files due to unique sizes from list.2 files left.
Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
It seems like you have 2 files that are not unique
Totally, 223 KiB can be reduced.
Now making results file results.txt

你可以在 dryrun 模式中运行这个命令 (换句话说,仅仅汇报可能会另外被做出的改动)。

$ rdfind -dryrun true ~
(DRYRUN MODE) Now scanning "/home/shark", found 12 files.
(DRYRUN MODE) Now have 12 files in total.
(DRYRUN MODE) Removed 1 files due to nonunique device and inode.
(DRYRUN MODE) Total size is 699352 bytes or 683 KiB
Removed 9 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 223 KiB can be reduced.
(DRYRUN MODE) Now making results file results.txt

rdfind 命令同样提供了类似忽略空文档(-ignoreempty)和跟踪符号链接(-followsymlinks)的功能。查看 man 页面获取解释。

-ignoreempty ignore empty files
-minsize ignore files smaller than speficied size
-followsymlinks follow symbolic links
-removeidentinode remove files referring to identical inode
-checksum identify checksum type to be used
-deterministic determiness how to sort files
-makesymlinks turn duplicate files into symbolic links
-makehardlinks replace duplicate files with hard links
-makeresultsfile create a results file in the current directory
-outputname provide name for results file
-deleteduplicates delete/unlink duplicate files
-sleep set sleep time between reading files (milliseconds)
-n, -dryrun display what would have been done, but don't do it

注意 rdfind 命令提供了 -deleteduplicates true 的设置选项以删除副本。希望这个命令语法上的小问题不会惹恼你。;-)

$ rdfind -deleteduplicates true .
...
Deleted 1 files. <==

你将可能需要在你的系统上安装 rdfind 命令。试验它以熟悉如何使用它可能是一个好主意。

使用 fdupes 命令

fdupes 命令同样使得识别重复文件变得简单。它同时提供了大量有用的选项——例如用来迭代的 -r。在这个例子中,它像这样将重复文件分组到一起:

$ fdupes ~
/home/shs/UPGRADE
/home/shs/mytwin
/home/shs/lp.txt
/home/shs/lp.man
/home/shs/penguin.png
/home/shs/penguin0.png
/home/shs/hideme.png

这是使用迭代的一个例子,注意许多重复文件是重要的(用户的 .bashrc 和 .profile 文件)并且不应被删除。

# fdupes -r /home
/home/shark/home.html
/home/shark/index.html
/home/dory/.bashrc
/home/eel/.bashrc
/home/nemo/.profile
/home/dory/.profile
/home/shark/.profile
/home/nemo/tryme
/home/shs/tryme
/home/shs/arrow.png
/home/shs/PNGs/arrow.png
/home/shs/11/files_11.zip
/home/shs/ERIC/file_11.zip
/home/shs/penguin0.jpg
/home/shs/PNGs/penguin.jpg
/home/shs/PNGs/penguin0.jpg
/home/shs/Sandra_rotated.png
/home/shs/PNGs/Sandra_rotated.png

fdupe 命令的许多选项列如下。使用 fdupes -h 命令或者阅读 man 页面获取详情。

-r --recurse recurse
-R --recurse: recurse through specified directories
-s --symlinks follow symlinked directories
-H --hardlinks treat hard links as duplicates
-n --noempty ignore empty files
-f --omitfirst omit the first file in each set of matches
-A --nohidden ignore hidden files
-1 --sameline list matches on a single line
-S --size show size of duplicate files
-m --summarize summarize duplicate files information
-q --quiet hide progress indicator
-d --delete prompt user for files to preserve
-N --noprompt when used with --delete, preserve the first file in set
-I --immediate delete duplicates as they are encountered
-p --permissions don't soncider files with different owner/group or
 permission bits as duplicates
-o --order=WORD order files according to specification
-i --reverse reverse order while sorting
-v --version display fdupes version
-h --help displays help

fdupes 命令是另一个你可能需要安装并使用一段时间才能熟悉其众多选项的命令。

总结

linux 系统提供能够定位并(潜在地)能移除重复文件的一系列的好工具,以及能让你指定搜索区域及当对你所发现的重复文件时的处理方式的选项。



Tags:Linux   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
1、反斜杠的使用反斜线可以将紧随其后的单个字符视为字面意义上的字符,如*在 Shell中代表任意字符,在查找时经常会使用*来查找多个匹配的文件,但是有时我们需要找的就是*字...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
1. 前言本文主要讲解如何使用Linux命令行测试网站连接速度。网站速度可以对用户体验有很大的影响,如果你是一个web开发人员,你当然希望开发一个能让用户迅速打开的网站。怎...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
第一步:创建脚本#!/bin/bash# func:自动监控tomcat脚本并且执行重启操作# 获取tomcat进程ID(其中[grep -w &#39;tomcat&#39;]代码中的tomcat需要替换为你的tomcat文件夹名)Tomc...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
0.新建操作:mkdir abc #新建一个文件夹touch abc.sh #新建一个文件1.查看操作查看目录:ll #显示目录文件详细信息du -h 文件/目录 #查看大小pwd #显示路径查看文件内容:cat|hea...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
本文记录的是在CentOS 7下安装与配置jdk-8u162的过程。一、下载jdk-8u162版本链接地址:官方地址二、上传jdk到centos下三、检查当前linux系统上是否有jdk,linux命令:rpm -qa |...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
中断处理 - 上半部(硬中断)由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux对中断的处理过程。中断处理相关结构前面说过,8259A中断控制器 由两...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
我们都知道没有插电的计算机就是一堆废铁,那么插了电的计算机其实也就是带了电的废铁,哈哈,没有软件的运作,计算机的功能也无从发挥。就好像行尸走肉,所以我们要了解一下软件是什...【详细内容】
2019-11-27   Linux  点击:(0)  评论:(0)  加入收藏
作为一个Java开发人员,有些常用的Linux命令必须掌握。即使平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服...【详细内容】
2019-11-26   Linux  点击:(4)  评论:(0)  加入收藏
1、把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩mydata目录2、把/home目录下面的mydata.zip解压到mydatabak目录里面unzip mydata.zip -d m...【详细内容】
2019-11-26   Linux  点击:(2)  评论:(0)  加入收藏
Linux 的优秀之处自然不必多说。如果将操作系统比作一辆汽车,那 Linux 就是一辆性能出色的多功能越野车,上山下海飞天无所不能。如果你拥有了它,一定不会只满足于驾驶它上下班,...【详细内容】
2019-11-26   Linux  点击:(2)  评论:(0)  加入收藏
硬盘分区并格式化好以后,就能在Linux系统上使用了,使用之前需要挂载到对应的目录上面去。...【详细内容】
2019-11-26   Linux  点击:(4)  评论:(0)  加入收藏
如果这篇文章对您有帮助,请关注并点赞,感谢您的支持,如果还有其他问题,请私信给我今天来介绍linux下如何添加账户及修改密码的命令首先来介绍如何添加账户命令格式 useradd...【详细内容】
2019-11-26   Linux  点击:(1)  评论:(0)  加入收藏
1. 基本用法最简单的用法就是不带参数,仅输入 ssh 再加上主机地址,比如:ssh 192.168.0.112这种形式登陆主机,会默认使用当前用户进行登录。第一次连接的时候,SSH 会确认目标主机...【详细内容】
2019-11-25   Linux  点击:(3)  评论:(0)  加入收藏
最近在用freeswitch软交换进行语音通话,通话的时候需要调用音频文件进行播放,当并发量上来的时候,freeswitch监听服务的端口会不断的down掉,查看日志发现报了一个错如下: 这个问...【详细内容】
2019-11-25   Linux  点击:(1)  评论:(0)  加入收藏
概述运维工作中,常常需要下载文件,因为网站下载速度限制或者网络等原因导致下载让人无法忍受,所以今天推荐这款多线程下载工具--axel,下载文件时可以替代curl、wget。Axel tries...【详细内容】
2019-11-25   Linux  点击:(2)  评论:(0)  加入收藏
每个人喜欢的版本因人而异。可以给你推几荐个常用的版本,优缺点对比,然后你根据自己的需求选择:linux常见发行版本(一):deepin 这是中国的操作系统中排名最高的一个,基于debian,以易...【详细内容】
2019-11-22   Linux  点击:(8)  评论:(0)  加入收藏
基本环境准备jdk安装配置。安装目录例如:/usr/java/jdk1.8.0_05tomcat下载放到约定目录。例如:/usr/local/dmstomcat tomcat做成系统服务把tomcat做成系统服务,就可以使用servi...【详细内容】
2019-11-20   Linux  点击:(6)  评论:(0)  加入收藏
在工作中经常有需要将linux虚拟机配置成固定的IP地址。首先要关闭VMware的DHCP编辑->虚拟机网络配置 选择VMnet8,取消勾选"使用本地DHCP服务将IP地址分配给虚拟机"选项。 点...【详细内容】
2019-11-20   Linux  点击:(7)  评论:(0)  加入收藏
应朋友们要求,介绍上Linux系统下的实时监控平台,在上次提到了glances,它提供了较多的监控指标,那如果我们要看历史数据呢?某一时间段的回放呢?显然glances是做不到的。因此,实时监...【详细内容】
2019-11-20   Linux  点击:(6)  评论:(0)  加入收藏
想玩linux,电脑不想装双系统,性能不够跑不了虚拟机,树莓派买不起,怎么办?安卓手机啊本文就以Nexus 5X(PureNexus 7.1.2)为例,介绍如何在手机上跑Linux,这是一种我认为最简便 最好看的...【详细内容】
2019-11-20   Linux  点击:(10)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条