Linux下如何寻找相同文件的方法

随着电脑的使用,系统里将产生很多垃圾,最典型的就是同一份文件被保存到了不同的位置,这样导致的结果就是磁盘空间被大量占用,系统运行越来越慢。

所以如果你的电脑空间告急的话,可以试着去删除这样的文件,释放一些空间。在 Linux 下,我们可以通过识别文件的 inode 值来找出系统中的相同文件。

inode 是一个数据结构,记录了文件所有信息,除了文件名和文件内容。如果两个或多个文件具有相同的 inode 值,即使它们的文件名不一样,位置不一样,它们的内容、所有者、权限其实都是一样的,我们可以将其视有相同文件。

这类型的文件其实就是所谓的「硬链接」。硬链接具有相同的 inode 值,但文件名不一样。而软链接其实就是快捷方式,它指向目标文件,但有着自己的 inode 值。

$ ls -l my*
-rw-r--r-- 4 liangxu liangxu  228 Apr 12 19:37 myfile
lrwxrwxrwx 1 liangxu liangxu   6 Apr 15 11:18 myref -> myfile
-rw-r--r-- 4 liangxu liangxu  228 Apr 12 19:37 mytwin

我们无法直接知道同一目录下有哪些文件是有相同的 inode 值,但要识别起来也不难。其实我们只要使用 ls -i 命令,再以 inode 值进行排序,就可以直接找到这些文件。

$ ls -i | sort -n | more
 ...
 788000 myfile  <==
 788000 mytwin  <==
 801865 Name_Labels.pdf
 786692 never leave home angry
 920242 NFCU_Docs
 800247 nmap-notes

在这个结果的第一列里,就是对应的 inode 值。所以从这个结果里我们一眼就可以看出来,哪些文件具有相同 inode 值。

如果你只是想找到一个文件的对应硬链接文件,我们可以使用 find 命令,再加个 -samefile 选项即可快速找到。

$ find . -samefile myfile
./myfile
./save/mycopy
./mytwin

这些文件都是有相同的 inode 值,不信的话可以再使用 ls 命令来查看更多信息:

$ find . -samefile myfile -ls
 788000  4 -rw-r--r--  4 liangxu  liangxu   228 Apr 12 19:37 ./myfile
 788000  4 -rw-r--r--  4 liangxu  liangxu   228 Apr 12 19:37 ./save/mycopy
 788000  4 -rw-r--r--  4 liangxu  liangxu   228 Apr 12 19:37 ./mytwin

我们可以看到,除了文件名之外,这几个文件名的信息完全一样。细心的朋友可能会注意到,在第2列(硬连接数)是4,而实际上我们找出来的文件只有3个,这说明还有一个文件与他们共享 inode 值,只是我们通过这条命令没有找出来而已。

作为一个懒人,每次敲命令多麻烦,直接上脚本找出目录下的相同文件!

#!/bin/bash

# seaches for files sharing inodes

prev=""

# list files by inode
ls -i | sort -n > /tmp/$0

# search through file for duplicate inode #s
while read line
do
  inode=`echo $line | awk '{print $1}'`
  if [ "$inode" == "$prev" ]; then
    grep $inode /tmp/$0
  fi
  prev=$inode
done < /tmp/$0

# clean up
rm /tmp/$0

运行结果:

$ ./findHardLinks
 788000 myfile
 788000 mytwin

当然了,你还可以使用 find 命令,根据 inode 值,找到系统里所有相同文件。

$ find / -inum 788000 -ls 2> /dev/null
 788000  4 -rw-r--r--  4 liangxu  liangxu  228 Apr 12 19:37 /tmp/mycopy
 788000  4 -rw-r--r--  4 liangxu  liangxu  228 Apr 12 19:37 /home/liangxu/myfile
 788000  4 -rw-r--r--  4 liangxu  liangxu  228 Apr 12 19:37 /home/liangxu/save/mycopy
 788000  4 -rw-r--r--  4 liangxu  liangxu  228 Apr 12 19:37 /home/liangxu/mytwin

在这条命令里,我们将错误提示重定向到 /dev/null 这个特殊文件里,这样在搜索一些我们没有权限访问的路径时,不会满屏的 permission denied 。

到此这篇关于Linux下如何寻找相同文件的方法的文章就介绍到这了,更多相关Linux 寻找相同文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Linux中文件的五个查找命令总结

    Linux的查找命令有5个,分别如下: which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果: type:用于区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的.如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令.type命令其实不能算查找命令: whereis:只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s): locate:相当于find

  • 详解Linux查找目录下的按时间过滤的文件

    在维护项目中,有时会指定都一些条件进行过滤文件,并对该批文件进行操作:这时我们将使用shell命令进行操作:直接上代码 #!/bin/sh #BEGIN #`find ./ ! -name "." -type d -prune -o -newermt '2001-01-01 00:00:00' ! -newermt '2019-01-01 00:00:00'`忽略所有的子目录 files=`find ./ -path "./2*" -prune -o -type f

  • Linux 命令find之查找文件的示例

    在 Linux 命令中,find用于在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名,其支持按名称查找.按正则表达式查找.按文件大小查找.按文件权限查找等多种查询方式.如果在使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示. 语法:find + 目标目录(路径) + <选项> + 参数 常用选项列表 选项 含义 -perm <权限数值> 查找符合指定的权限数值的文件或目录 -type <文

  • 在 Linux 中查找文件的方法

    使用简单的命令在 Linux 下基于类型.内容等快速查找文件. 如果你是 Windows 或 OSX 的非资深用户,那么可能使用 GUI 来查找文件.你也可能发现界面受限,令人沮丧,或者两者兼而有之,并学会了组织文件并记住它们的确切顺序.你也可以在 Linux 中做到这一点 -- 但你不必这样做. Linux 的好处之一是它提供了多种方式来处理.你可以打开任何文件管理器或按下 Ctrl+F ,你也可以使用程序手动打开文件,或者你可以开始输入字母,它会过滤当前目录列表. 使用 Ctrl+F 在 L

  • linux模糊查找一个文件的方法

    在当前目录下搜索指定文件: find . -name test.txt  在当前目录下模糊搜索文件: find . -name '*.txt'  在当前目录下搜索特定属性的文件: find . -amin -10 # 查找在系统中最后10分钟访问的文件 find . -atime -2 # 查找在系统中最后48小时访问的文件 find . -empty # 查找在系统中为空的文件或者文件夹 find . -group cat # 查找在系统中属于 groupcat的文件 find . -mmin

  • Linux shell查找文件显示行号和对应区间的内容

    概述 有时候我们需要在一个文件大小不断变化的日志文件里,找寻一些错误信息.这个时候我们可以用如下的小技巧,找出错误日志的内容. CAT的时候显示行号 cat -n cart.log | grep "支付失败" SED找到错误日志的内容 sed -n '1000,2000p' cart.log 由于我们通过CAT命令已经知道行号了,只需要使用SED,输入一个行号的大概范围,就可以详细的展示上下文的日志内容了. 小技巧 如果公司里没有完善的查看日志的工具,例如ELK.那么借助上面的小工具,

  • Linux中文件查找技术大全

    每一种操作系统都是由成千上万个不同种类的文件所组成的.其中有系统本身自带的文件,用户自己的文件,还有共享文件等等.我们有时候经常忘记某份文件放在硬盘中的哪个地方.在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击"开始"-"搜索"中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档. 可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻烦的事情.毕竟在Linux中需要我们使

  • linux模糊查找文件用什么命令比较好

    1. 前言 本文主要讲解如何在Linux系统下使用命令行工具模糊查找文件,本文的工具包括find命令的用法也介绍grep命令的使用方法,同时也有find与grep两者结合,能更精确根据条件查找文件. 2. 根据文件名模糊查找文件 例如: 在目录/var/zcwyou里,找到.txt后缀的文件,文件名大小写敏感.即只能匹配.txt后缀的 [root@zcwyou ~]# find /var/zcwyou -name '*.txt' 在目录/var/zcwyou里,找到.txt后缀的文件,忽略大小定

  • Linux下如何寻找相同文件的方法

    随着电脑的使用,系统里将产生很多垃圾,最典型的就是同一份文件被保存到了不同的位置,这样导致的结果就是磁盘空间被大量占用,系统运行越来越慢. 所以如果你的电脑空间告急的话,可以试着去删除这样的文件,释放一些空间.在 Linux 下,我们可以通过识别文件的 inode 值来找出系统中的相同文件. inode 是一个数据结构,记录了文件所有信息,除了文件名和文件内容.如果两个或多个文件具有相同的 inode 值,即使它们的文件名不一样,位置不一样,它们的内容.所有者.权限其实都是一样的,我们可以将其视

  • Linux下对各种压缩文件的处理方法

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包.-c是表示产生新的包,-f指定包的文件名. # tar -rf all

  • 在linux命令下导出导入.sql文件的方法

    本文讲述了在linux命令下导出导入.sql文件的方法.分享给大家供大家参考,具体如下: 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql #/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql 敲回车后会提示输入密码 2.只导出表结构 mysqldump -u用户名 -p密码 -d 数据库名 >

  • linux下上传下载文件夹的方法

    Linux下目录复制:本机->远程服务器 scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 test1为源目录,test2为目标目录,zhidao@192.168.0.1为远程服务器的用户名和ip地址. Linux下目录复制:远程服务器->本机 scp -r zhidao@192.168.0.1:/home/test2 /home/shaoxiaohu/test1 zhidao@192.168.0.1为远程服务器的用户名和

  • CentOS(Linux)下的apache服务器配置与管理方法分享

    一.WEB服务器与Apache 1.web服务器与网址 2.Apache的历史 3.补充 http://www.netcraft.com/可以查看apache服务器的市场占有率 同时必须注意的是ngnix,正处于强势增长的上升时期,大有和apache一争天下的感觉,真是后生可畏~~~ 二.Apache服务器的管理命令 1.命令启动:service httpd start/stop/restart/reload/condrestart/status/configtest/graceful/help

  • Linux 下载百度网盘大文件的方法

    Linux 下没有百度网盘客户端,用浏览器下载速度慢得急死人 鼠标移到链接处, 右键, 然后复制链接 接着在终端里输入 axel -n 50 -o filename.ext "粘贴链接到此处" axel 是下载程序名, -n 后面数字是线程数,多少自己决定, -o 后面下载到本机上 保持的文件名, 最后面 英文引号里面放下载链接 使用这种方式 我的下载速度可以达到1.5M, 跟浏览器 10KB 左右的速度比简直是飞起 总结 以上所述是小编给大家介绍的Linux 下载百度网盘大文件的方法

  • LINUX下Oracle数据导入导出的方法详解

    本文讲述了LINUX下Oracle数据导入导出的方法.分享给大家供大家参考,具体如下: 一. 导出工具 exp 1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移   它有三种模式: a.  用户模式: 导出用户所有对象以及对象中的数据: b.  表模式: 导出用户所有表或者指定的表: c.  整个数据库: 导出数据库中所有对象. 2. 导出工具exp交互式命令行方式的使用的例子: $ex

  • php在linux下检测mysql同步状态的方法

    本文实例讲述了php在linux下检测mysql同步状态的方法.分享给大家供大家参考.具体分析如下: 这里通过两个实例来介绍mysql同步状态检测实现方法.代码如下: 复制代码 代码如下: #!/bin/sh     #check MySQL_Slave Status  #crontab time 00:10  MYSQL_USER="root" MYSQL_PWD="123456" MYSQL_SLAVE_LOG="/tmp/check_mysql_sl

  • linux下安装php扩展memcache的方法

    memcache 的工作就是在专门的机器的内存里维护一张巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率,减轻后端数据库的读写压力. 实验环境:centos 6.6 x86_64 LAMP环境搭建完毕:php版本5.6.8.apache版本2.4.12 1.在安装memcached之前需要安装libevent支持: # wget http://syslab.comsenz.com/downloads/linux/libevent-1.4.12-stable.tar

  • Linux下apache支持PHP配置文件的方法

    本文用来记忆整了两天的lamp环境,如果对PHP没有要求建议全部用yum 一键安装,纯属个人经验,主要作用是用来参考的. yum install httpd #yum 安装Apache. php编译安装 安装前记得安装php依赖环境 yum安装PHP5.6的依赖环境 yum -y install gcc gcc-c++ libxml2 libxml2-devel PHP5.6.2下载路径 wget http://mirrors.sohu.com/php/php-5.6.2.tar.gz /con

随机推荐