Linux命令:find命令 查找文件

find命令是Linux下最常用的命令之一,灵活的使用find命令,你会发现查找文件变得十分简单。

命令格式

find [指定查找目录]  [查找规则(选项)]  [查找完后执行的动作]

参数规则

-name 按照文件名查找文件
-iname 根据文件名查找,但是不区分大小写
-perm 按照文件权限来查找文件
-prune 使用这一选项可以使find命令不在当前指定的目录中查找

-user 根据属主来查找文件
-group 根据属组来查找文件

-uid 根据uid来查找文件
-gid 根据gid来查找文件

关联条件的使用
-a 连接两个不同的条件(两个条件必须同时满足)
-o 连接两个不同的条件(两个条件满足其一即可)
-not 对条件取反的

根据文件时间戳的相关属性来查找文件
-mmin n 文件最后一次修改是在n分钟之内
-mtime n 文件最后一次修改是在 n*24小时之内
find /tmp –atime +5 表示查找在五天内没有访问过的文件

-amin n 文件最后一次访问是在n分钟之内
-atime n 文件最后一次访问是在 n*24小时之内

-cmin n 文件的状态在n分钟内被改变
-ctime n 文件状态在n*24小时内(也就是n天内)被改变

-type 根据文件类型来查找文件

f // 普通文件
d //目录文件
l //链接文件
b //块设备文件
c //字符设备文件
p //管道文件
s //socket文件

-size 根据大小来查找文件

-perm 根据文件权限查找文件

-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件

查找完执行
-print 默认情况下的动作
-ls 查找到后用ls 显示出来
-ok [commend] 查找后执行命令的时候询问用户是否要执行
-exec [commend] 查找后执行命令的时候不询问用户,直接执行

-nouser and -nogroup 在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,应该及时清除)

相关命令

locate命令,locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
whereis命令,在特定目录中查找符合条件的文件。和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

which命令,which是通过 PATH环境变量到该路径内查找可执行文件,基本功能是寻找可执行文件。
type命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

场景范例

1. 用文件名查找文件

这是find命令的一个基本用法。
# find -name "nginx.conf"

2.用文件名查找文件,忽略大小写
# find -iname "nginx.conf"

3. 使用mindepth和maxdepth限定搜索指定目录的深度
在root目录及其子目录下查找passwd文件。

# find / -name passwd
在root目录及其1层深的子目录中查找passwd. (例如root — level 1, and one sub-directory — level 2)

# find -maxdepth 2 -name passwd
在root目录下及其最大两层深度的子目录中查找passwd文件. (例如 root — level 1, and two sub-directories — level 2 and 3 )

# find / -maxdepth 3 -name passwd
在第二层子目录和第四层子目录之间查找passwd文件。

# find -mindepth 3 -maxdepth 5 -name passwd

4. 查找后指令,在find命令查找到的文件上执行命令

下面的例子展示了find命令来计算所有不区分大小写的文件名为“MyCProgram.c”的文件的MD5验证和。{}将会被当前文件名取代。

find -iname "MyCProgram.c" -exec md5sum {} \;
5.相反匹配

显示所有的名字不是MyCProgram.c的文件或者目录。由于maxdepth是1,所以只会显示当前目录下的文件和目录。

find -maxdepth 1 -not -iname "MyCProgram.c"

6. 使用inode编号查找文件

任何一个文件都有一个独一无二的inode编号,借此我们可以区分文件。创建两个名字相似的文件,例如一个有空格结尾,一个没有。

从ls的输出不能区分哪个文件有空格结尾。使用选项-i,可以看到文件的inode编号,借此可以区分这两个文件。

你可以如下面所示在find命令中指定inode编号。在此,find命令用inode编号重命名了一个文件。

find -inum 16187430 -exec mv {} new-test-file-name \;

7. 根据文件权限查找文件

下面的操作时合理的:
找到具有指定权限的文件
忽略其他权限位,检查是否和指定权限匹配
根据给定的八进制/符号表达的权限搜索
此例中,假设目录包含以下文件。注意这些文件的权限不同。

ls -l
total 0
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
---------- 1 root root 0 2009-02-19 20:31 no_for_all
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
找到具有组读权限的文件。使用下面的命令来找到当前目录下对同组用户具有读权限的文件,忽略该文件的其他权限。

find . -perm -g=r -type f -exec ls -l {} \;
-rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
-rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read
找到对组用户具有只读权限的文件。

find . -perm g=r -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
找到对组用户具有只读权限的文件(使用八进制权限形式)。

find . -perm 040 -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read

8. 找到home目录及子目录下所有的空文件(0字节文件)

下面命令的输出文件绝大多数都是锁定文件盒其他程序创建的place hoders

find ~ -empty
只列出你home目录里的空文件。

find . -maxdepth 1 -empty

只列出当年目录下的非隐藏空文件。

find . -maxdepth 1 -empty -not -name ".*"
9. 查找5个最大的文件

下面的命令列出当前目录及子目录下的5个最大的文件。这会需要一点时间,取决于命令需要处理的文件数量。

find . -type f -exec ls -s {} \; | sort -n -r | head -5
10. 查找5个最小的文件

方法同查找5个最大的文件类似,区别只是sort的顺序是降序。

find . -type f -exec ls -s {} \; | sort -n | head -5
上面的命令中,很可能你看到的只是空文件(0字节文件)。如此,你可以使用下面的命令列出最小的文件,而不是0字节文件。

find . -not -empty -type f -exec ls -s {} \; | sort -n | head -5

11. 使用-type查找指定文件类型的文件

只查找socket文件
find . -type s
查找所有的目录
find . -type d
查找所有的一般文件
find . -type f
查找所有的隐藏文件

find . -type f -name ".*"
查找所有的隐藏目录

find -type d -name ".*"
12. 通过和其他文件比较修改时间查找文件

显示在指定文件之后做出修改的文件。下面的find命令将显示所有的在ordinary_file之后创建修改的文件。
# find -newer ordinary_file

13. 通过文件大小查找文件
使用-size选项可以通过文件大小查找文件。
查找比指定文件大的文件

find ~ -size +100M
查找比指定文件小的文件

find ~ -size -100M
查找符合给定大小的文件

find ~ -size 100M
注意: – 指比给定尺寸小,+ 指比给定尺寸大。没有符号代表和给定尺寸完全一样大。

14. 给常用find操作取别名

若你发现有些东西很有用,你可以给他取别名。并且在任何你希望的地方执行。
常用的删除a.out文件。

alias rmao="find . -iname a.out -exec rm {} \;"
# rmao
删除c程序产生的core文件。

alias rmc="find . -iname core -exec rm {} \;"
# rmc

15. 用find命令删除大型打包文件
下面的命令删除大于100M的*.zip文件。
find / -type f -name *.zip -size +100M -exec rm -i {} \;"

16.找到在1个小时内被更改的文件
find -mmin -60


或者
find -mtime -1
17.找到1个小时内被访问过的文件
# find . -amin -60

18.查找一个小时内状态被改变的文件
# find . -cmin -60

19.搜索仅仅限定于文件,不显示文件夹
# find / -name "*.log"
# find / -xdev -name "*.log"

20.仅仅查找非隐藏的文件(不显示隐藏文件)
如果我们查找的时候不想隐藏文件也显示出来,可以使用下面的正则式查找:
下面的命令会显示当前目录及其子目录下15分钟内文件内容被修改过的文件,并且只列出非隐藏文件。也就是说,以.开头的文件时不会显示出来的
# find / -xdev -name "*.log"
21.查找文件修改时间在某一文件修改后的文件
# find -newer /etc/passwd
22.仅仅在当前文件系统中搜索
下面这个命令会搜索根目录/及其子目录下所有.log结尾的文件名。如果你有多个分区在/下面,那么这个搜索会去搜索所有的被挂载的分区:
# find / -name "*.log"
如果我们使用-xdev选项,那么仅仅会在在当前文件系统中搜索,下面是在xdev的man page上面找到的一段-xdev的定义:
-xdev Don’t descend directories on other filesystems.
下面的命令会在/目录及其子目录下搜索当前文件系统(也就是/挂载的文件系统)中所有以.log结尾的文件,也就是说如果你有多个分区挂载在/下面,下面的搜索不会去搜索其他的分区的(比如/home/)
# find / -xdev -name "*.log"

参考 Linux的五个查找命令 阮一峰

时间: 2024-10-14 13:11:19

Linux命令:find命令 查找文件的相关文章

linux下常用的查找文件命令

一.常用的查找命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which       查看可执行文件的位置 whereis    查看文件的位置 locate       配 合数据库查看文件位置 find          实际搜寻硬盘查询文件名称 二.which命令的常用方法 which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件: [[email protected] ~]# which cat /bin/c

Linux中常用的查找文件的命令

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.这些是从网上找到的资料(参考资料1),因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用. which       查看可执行文件的位置 whereis    查看文件的位置 locate       配合数据库查看文件位置 find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex) 1.which 语法:  [r

Linux下相关查找文件命令(find locate which whereis type)

以下内容摘自:http://blog.csdn.net/jessica1201/article/details/8139249 标注的内容为自己的补充: 我们经常需要在系统中查找一个文件,那么在linux系统中我们如何准确高效的确定一个文件在系统中的具体位置呢?一下我总结了在linux系统中用于查找文件的几个命令. 1.find命令 find是最常用也是最强大的查找命令,它可以查找任何类型的文件. find命令的一般格式为:find <指定目录><指定条件><指定动作>

Windows命令行(cmd)下快速查找文件(类似Linux下find命令)

for /r 用法简介 用了Linux下的find命令,觉得查找文件很方便,那么在windows下有没有类似的命令可以遍历目录并通过文件名找到文件呢?答案是有: Windows下的 for /r 命令具有与Linux下 find 命令类似的功能,使用语法上类似: find /r 目录名 %变量名 in (匹配模式1,匹配模式2) do 命令 匹配模式可以是通配类似于: *.jpg:所有.jpg后缀的文件 *test*:所有名称中包含test的文件 注意: 1. 匹配模式中至少带上1个*号 2.

【Linux探索之旅】第二部分第九课:查找文件,无所遁形

内容简介 1.第二部分第九课:查找文件,无所遁形 2.第二部分测试题 查找文件,无所遁形 这一课不难,但挺重要的. 之前的课程我们见识过了Linux下文件的组织形式是很特别的,跟Windows不一样. 我们也用ls / 这个命令来列出根目录下的所有目录,有/bin,/etc,/var,/home,等等.而这些目录下又有子目录和文件,错综复杂. 这些目录中有一部分是历史遗留的,从Unix时代就有了.问题是:我们如何在这"茫茫文海"中查找我们需要的文件. "人潮人海中,有你有我.

20165223 Linux安装及命令入门

预备作业3:Linux安装及命令入门 一.VirtualBox和Ubuntu的安装 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,我开始学习虚拟机的安装,根据教程一步步试着安装. 安装VirtualBox 我先点击进入了VirtualBox官网,却只看到了5.2.6和5.1.32两个版本,于是先试着把5.2.6下了下来,想试试看能不能正常安装.然而事情并不尽如人意,安装过程中还是遇到了一些小障碍. 在官网安装的时候下载速度特别慢 在官网中按教程下载的5.2.6版本却在官网中

Linux三剑客——grep命令

过滤文本grep命令 grep是一种强大的文本搜索工具命令,用于查找文件中符合指定格式的字符串,支持正则表达式.如不指定任何文件名称,或是所给予的文件为"-",则grep命令从标准输入设备读取数据.grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟grep命令有很小不同.egrep是grep的扩展.fgrep就是fixed grep或fast grep,该命令使用任何正则表达式中的元字符表示其自身的字面意义,不在特殊.其中egrep就等同于"g

Linux 入门记录:四、Linux 系统常用命令

一.日期时间 命令 date 查看.设置当前系统时间: date -u 格林威治时间 date %Y-%m-%d 显示格式化的时间 date -s "23:00" 使用 -s 参数设置.修改时间 命令 hwclock 或 clock 显示硬件时钟时间 命令 cal 查看日历 命令 uptime 查看系统启动后运行时间,也可查看系统负载(过去1分钟.5分钟.15分钟的负载) 二.输出.查看命令 命令 echo 回显输入的内容 命令 cat 显示文件内容 命令 head 显示文件的头几行(

linux命令---查找文件中的内容

linux命令---查找文件中的内容 [[email protected] ~]$ cat 1.txt |egrep '123456789|second'-------匹配123456789或者second的行 first line:123456789012345678901234567890123456789012345678901234567890 second line:one two three four five six seven eight nine ten [[email pro

linux查找文件命令总结

使用电脑的时候,经常需要查找文件在Linux中,有很多方法可以做到这一点.国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条.大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的.1. findfind是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.find的使用格式如下:$ find <指定目录> <指定条件> <指定动作>- <指定目录>: 所要搜索的目录及其所有子目录.默认为当前目录.- <指