Linux centos7操作系统中,find命令是一个功能强大的工具,它可以在给定目录及其子目录中查找文件和目录。find 命令还可以使用正则表达式灵活地查找符合特定条件的文件。
find命令的常规使用方法,可以使用man find查看,此处不多赘述。
可以很肯定地说,find命令是Linux后台开发人员必须熟知的操作之一,除非您使用的是Windows Server。
本文仅就find中一些特殊使用,作一简单讨论。
需要牢记的语法
find path -option [-print] [-exec -ok |xargs |grep] [command {} \;]
一、目录路径
path是要查找的目录路径,常用的几种表示方法需要熟悉:
~ 表示$HOME目录
. 表示当前目录
./ 与.相同,表示当前目录
/ 表示根目录
`pwd` 表示输出结果时要显示绝对路径
$PWD 表示的含义与`pwd`相同
如果不写目录路径,默认是当前目录
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find与find *命令相同。
如果仅查询当前目录下的.txt文件,可以简写
find *.txt
二、表达式option
在find命令中,-name –type等,并非选项,应认为是查询表达式。
我们知道,find命令的执行原理是,系统把目录中的每一个文件与表达式进行test(判断与比较),结果为true时保留前输出结果,为false时略过,全部文件test后打印输出find执行结果。
在表达式之间,可以应用逻辑符号,连接多表达式的关系。
! 或-not 表示逻辑非
-o 或–or 表示逻辑或
-a 或-and 表示逻辑与(默认方式忽略,一般不写)
查询名称-name与查询文件类型为-type 是与关系,一般不加-a
三、动作 [-print]
find命令查询结果默认是分行打印输出。
-print 一般不用写上。如果想把查询结果不分行输出,可以添加 -print0
在默认操作的基础上,可以设置其他需要的操作。如删除查询结果 -delete
如删除aa开头的空.txt文件:
先查看一下有多少文件
find -name "a*.txt" -empty
把查询结果删除:
find -name "aa*.txt" -empty -delete
在-print、-delete外,还有一个列表查看-ls
-ls实际上默认加上了选项 –dils 表示列表显示结果(-l),同时显示文件inode号(-i,列表中第一列)、文件所匹配的块大小(-s,列表中第二列)
四、扩展操作 [-exec]
对查询结果的处理,仅有-print、–delete、-ls还不能满足要求,可以通过-exec,执行更多操作。
如何执行-exec(或-ok xargs),可自行搜索。
此处仅介绍一下如何把查询结果按文件大小排序。
正常理解,在ls –lSh中,-S 选项可以使文件按大小排序,-h选项可以把文件大小以易读的方式显示,下式可以排序
find -name "*.txt" -exec ls -lSh {} \;
结果并非如愿。原因在于,最后的\;是把查询结果一次一行(无法构成多个结果为一体)。只有把;改为+,才可以!
五、正则应用 [-regex]
正则表达式是一种通用的语法,用于描述和查找字符串中的模式。它以文本字符串,特殊字符和元字符的组合形式出现,帮助我们精确地查找所需内容。
要使用find 命令查找文件,需要提供搜索的目录,文件名或正则表达式。在搜索文件时,可以使用-regex 参数指定正则表达式,用于搜索文件中的特定字符串。
例如,要查找包含字符串“test”的文件,可以使用以下find 命令:
find ./ -regex ".*test.*"
上述命令在当前目录中查找任何文件,它的文件名包含字符串“test”,然后将其列出来。
也可以使用正则表达式搜索具有特定位数的文件名。例如,要查找包含六个字符的文件名,可以使用以下find命令:
find ./ -regex ".*^.{6}$"
-regex是用普通正则,不能查询有扩展正则表达式的情况。
应用扩展正则的代码是:-regextype posix-extended
上面的正确命令是:find ./ -regextype posix-extended -regex ".*^.{6}$"
案例:find命令还允许使用空格分隔的正则表达式搜索多个匹配模式的文件。例如,要查找扩展名为“txt”“sh”“jpg”的文件,可以使用以下find命令:
find ./ -regextype posix-extended -regex ".*\.txt$|.*\.sh$|.*\.jpg$"
find命令的正则表达式的功能正在不断改进,它已成为搜索文件的首选工具。它不仅强大,灵活,而且还可以使用正则表达式精确地指定搜索条件。使用find命令查找文件将大量节省时间。