linux 文件查找命令 find

前言

find命令是linux使用过程中经常用到的命令,但可能大家只会如下使用find

find ./

或者这样使用

find ./ | grep str

上述命令等同于

find ./ -name "*txt*"

可见,find命令与grep命名一个不同点是: find命名是完全匹配,grep命令默认就是最小匹配

然而,find其实何其强大,下面我们就来系统的学习下吧!

下面,我们列举find的应用的实例,看怎样使用find解决实际问题。

查找特定类型的文件

在默认情况下find会对文件路径与文件名字符串同时进行查找,而要想只对文件名进行查找需要加上-type f限制:

find ./ -type f -name "*txt"

上面命令的意思是,查找当前目录下文件名以txt结尾的文件。

在find命令中,-type选项支持的查找对象包括:

-type $type

其中$type可以为如下值:
b  块设备(block)
c  字符设备(character)
d    目录(directory)
p  命名管道(named pipe) 
f  普通文件(file)
l  符号链接(link)
s  套接字(socket) 
D  门(solaris中才有)

指定查找深度

find ./ -maxdepth 2 -name "*txt"

这条命令也非常有用,因为我们经常在查找文件时不希望递归某个文件夹下的所有子目录,于是我们可以使用-maxdepth指定递归的深度

查找文件大小大于200k,小于2MB

find ./ -name "*txt" -size  +200k -a -size -2M

在find命令中,不同的查询条件默认的逻辑关系是“与”,同时其条件的执行顺序是从左到右,可见条件的书写顺序可能也会影响查询的结果。

在find中支持的逻辑关系如下:

-a   逻辑与
-o    逻辑或
not/!  逻辑非

使用正则表达式

find ./ -regex ".*txt"

find中使用正则表达式是要注意,只有正则匹配整个文件路径时才算成功。

时间相关参数

使用 [c|a|m][min|time] n 查找最近n分钟或天创建、访问、修改的文件,具体如下:

  • -cmin n :查找系统中最后n分钟被改变文件状态的文件;
  • -ctime n:查找系统中最后n天小时被改变文件状态的文件;
  • -amin n: 查找系统中最后n分钟访问的文件;
  • -atime n:查找系统中最后n天访问的文件;
  • -mmin n:查找系统中最后n分钟被改变文件数据的文件;
  • -mtime n:查找系统中最后n天被改变文件数据的文件。可以使用-mtime -n +n: 按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项;
  • -newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件;

使用exec或ok来执行shell命令

使用find命令时,只要把想要的操作写在一个文件里,就可以用exec来配合find命令查找,很方便的。

在有些操作系统中只允许-exec选项执行诸如lsls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。

exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{}}\;中间有一个空格。为了使用exec选项。

例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中

 find ./ -type f -exec ls -l {} \;

等价于

find ./ -type  f |xargs ls -l

Was this helpful?

0 / 0

发表回复 0