前言
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
选项执行诸如ls
或ls -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