加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

寻到Linux系统里重复文件的6种方法

发布时间:2023-10-18 09:35:30 所属栏目:Linux 来源:转载
导读:   无论你是电脑小白还是技术大拿,在使用电脑的过程中或多或少的都留下许多重复的文件。这些文件不仅占用磁盘资源还会拖累我们的系统,特别是妹子们的电脑,动不动都卡,卡,卡,这时候她
  无论你是电脑小白还是技术大拿,在使用电脑的过程中或多或少的都留下许多重复的文件。这些文件不仅占用磁盘资源还会拖累我们的系统,特别是妹子们的电脑,动不动都卡,卡,卡,这时候她们会拿出必杀技—-电脑管家或安全卫士去清理垃圾,但如果是 Linux 系统呢?莫怕!本文将带你学习如何优雅的帮助妹子们清理电脑。
 
  我这里有 6 款飙车技能,希望能带你起飞:
 
  1. diff 文本比较命令
 
  diff 命令用于比较两个文件的差异。diff 的比较是以逐行的方式进行扫描的,如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。diff 命令的执行结果将使用 和 > 显示两文件之间的差异,并在行首指出有差异的行号,利用这个特性我们可以找到相同的文件。
 
  如果你比较的两个文件有差异,diff 将输出差异点:
 
  $ diff index.html backup.html
 
  2438a2439,2441
 
  >
 
  > That's all there is to report.
 
  >
 
  如果你执行 diff 后没有输出,那表示两个文件相同(不用再考虑了直接干掉一个文件吧)。
 
  $ diff home.html index.html
 
  $
 
  但是我要告诉你,diff 致命的缺点就是效率低,每次只能比较两个文件,且执行结果显示不明确。只能用于日常的脚本、代码的比较。
 
  2. cksum 对比校验和
 
  cksum 命令原本是用于检查文件的 CRC 是否正确,可以确保文件在到另一个系统中的完整性。cksum 命令会根据特定的算法根据文件内容计算出一串数字。如果两个文件的内容不同,它们的 cksum 值则不同,虽然不是绝对的,但 CCITT 官方表示,准确率至少可达 99.998% 。
 
  $ cksum *.html
 
  2819078353 228029 backup.html
 
  4073570409 227985 home.html
 
  4073570409 227985 index.html
 
  上面的 3 个文件,第 2 个和第 3 个的 cksum 值是相同的,我们可以认为这两个文件的内容是一致的。
 
  3. find 查找命令
 
  find 命令原本是用来在指定目录下查找文件,本身并没有查找重复文件的选项,但是它可以用于按照名称或类型对文件搜索然后结合 cksum 命令,对比文件的 CRC 值。
 
  $ find . -name "*.html" -exec cksum {} \;
 
  4073570409 227985 ./home.html
 
  2819078353 228029 ./backup.html
 
  4073570409 227985 ./index.html
 
  以上是根据名字查找以 html 结尾的文件,并计算出 cksum 值。
 
  4. fslint 重复数据查找命令
 
  fslint 命令能够找出系统中的重复文件、临时文件、错误的系统链接等内容,用户可以根据实际情况对这些内容予以删除,从而达到清理系统的目的。但是你要给它指定一个起始位置,否则该命令需要占用很长时间才能完成查找。
 
  $ 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
 
  Tips:fslint 是需要另外安装的,如果你想在任何路径下都能执行还需将它添加到 PATH 路径中。
 
  $ export PATH=$PATH:/usr/share/fslint/fslint
 
  5. rdfind 冗余数据查找命令
 
  rdfind 是一个通过访问目录和子目录来找出重复文件的自由开源的工具。被称为「冗余数据查找」,该命令可以根据文件日期确定哪些文件是原始文件,你可以决定是删除还是使用硬链接或者符号(软)链接代替它们。
 
  $ rdfind ~
 
  Now scanning "/home/alvin", 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/alvin", 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
 
  目录中有一些空文件,如果你想忽略他们,你可以像下面一样使用 -ignoreempty 选项,下面详细解释它的常用选项。
 
  选项 意义
 
  -ignoreempty 忽略空文件
 
  -minsize 忽略小于特定大小的文件
 
  -followsymlink 遵循符号链接
 
  -removeidentinode 删除引用相同 inode 的文件
 
  -checksum 标识要使用的校验和类型
 
  -deterministic 决定如何排序文件
 
  -makesymlinks 将重复文件转换为符号链接
 
  -makehardlinks 用硬链接替换重复文件
 
  -makeresultsfile 在当前目录中创建结果文件
 
  -outputname 提供结果文件的名称
 
  -deleteduplicates 删除/取消链接重复文件
 
  -sleep 设置读取文件之间的休眠时间(毫秒)
 
  -n,-dryrun 显示本应执行的操作,但不要执行
 
  这里需要我们注意一下,rdfind 命令提供了使用 -deleteduplicates true 设置删除重复文件的选项。顾名思义,使用这个选项它将自动删重复的文件。
 
  $ rdfind -deleteduplicates true .
 
  ...
 
  Deleted 1 files.
 
  在 RHEL、CentOS 上:执行 sudo yum install rdfind 即可完成 rdfind 的安装。
 
  6. 使用 fdupes 命令
 
  fdupes 是在指定目录以及子目录中识别和移除重复文件的命令行工具。仅执行 fdupes 命令,它会把重复文件放在一起,如下所示:
 
  $ fdupes ~
 
  /home/alvin/UPGRADE
 
  /home/alvin/mytwin
 
  /home/alvin/lp.txt
 
  /home/alvin/lp.man
 
  /home/alvin/penguin.png
 
  /home/alvin/penguin0.png
 
  /home/alvin/hideme.png
 
  -r 选项代表递归,表示在指定目录下以递归的方式来查找重复文件。这个选项慎用,因为 Linux 系统中包含许多重要的文件(比如用户的 .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
 
  fdupes 常用选项如下:
 
  选项 意义
 
  -r –recurse 递归
 
  -R –recurse 递归指定的目录
 
  -s –symlinks-H –hardlinks 遵循符号链接目录
 
  -H –hardlinks 将硬链接视为重复链接
 
  -n –noempty 忽略空文件
 
  -f –omitfirst 省略每组匹配中的第一个文件
 
  -A –nohidden 忽略隐藏文件
 
  -1 –sameline 相同列表匹配单行
 
  -S –size 显示重复文件的大小
 
  -m –summarize 汇总重复文件信息
 
  -q –quiet 进度指示器
 
  -d –delete 提示用户保存文件
 
  -N –noprompt 与–delete一起使用时无效,保留集合中的第一个文件
 
  -I –immediate 在遇到它们时删除重复项
 
  -p –permissions 权限不会将具有不同所有者/组或权限位的SONCIDER文件作为重复项
 
  -o –order=WORD 根据规范的WORD订单文件
 
  -i –reverse 排序时反向逆序
 
  -v –version 显示fdupes版本
 
  -h –help 显示帮助
 
  在 RHEL、CentOS 上:执行 sudo yum install fdupes 即可完成 fdupes 的安装。
 

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章