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 寻找相同文件内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring 代理模式知多少
- 一条SQL引发的“血案”:与SQL优化相关的4个案例
- Mycat分库分表全解析 Part 3 Mycat的安装
- Oracle非图形化界面创建数据库
- Mycat分库分表全解析 Part 5 Mycat 分片规则介绍
- PHP 命名空间与类自动加载实现
- mysqldump命令详解 Part 3-备份单表
- mysqldump命令详解 Part 7- -single-transaction 参数的使用
- 基于 Symfony 组件封装 HTTP 请求响应类
- 通过 PHP 原生代码实现 HTTP 路由器
- MySQL组复制(MGR)全解析 Part 10 MGR新增节点
- 基于 gorilla/sessions 在 Go 语言中管理 Session
- 通过 PHP 原生代码实现 HTTP 控制器
- Go 视图模板篇(一):模板引擎的定义、解析与执行
- Mycat分库分表全解析 Part 6 Mycat 全局序列号