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 *命令相同。

centos7 如何查看软件创建的网络_运维

如果仅查询当前目录下的.txt文件,可以简写

find  *.txt

centos7 如何查看软件创建的网络_linux_02

二、表达式option

在find命令中,-name –type等,并非选项,应认为是查询表达式。

我们知道,find命令的执行原理是,系统把目录中的每一个文件与表达式进行test(判断与比较),结果为true时保留前输出结果,为false时略过,全部文件test后打印输出find执行结果。

在表达式之间,可以应用逻辑符号,连接多表达式的关系。

! 或-not 表示逻辑非

-o 或–or 表示逻辑或

-a 或-and 表示逻辑与(默认方式忽略,一般不写)

centos7 如何查看软件创建的网络_centos7 如何查看软件创建的网络_03

查询名称-name与查询文件类型为-type 是与关系,一般不加-a

centos7 如何查看软件创建的网络_linux_04

三、动作 [-print]

find命令查询结果默认是分行打印输出。

-print 一般不用写上。如果想把查询结果不分行输出,可以添加  -print0

在默认操作的基础上,可以设置其他需要的操作。如删除查询结果  -delete

如删除aa开头的空.txt文件:

先查看一下有多少文件

find -name "a*.txt" -empty

centos7 如何查看软件创建的网络_数据库_05

把查询结果删除:

find -name "aa*.txt" -empty -delete

centos7 如何查看软件创建的网络_运维_06

在-print、-delete外,还有一个列表查看-ls

centos7 如何查看软件创建的网络_服务器_07

-ls实际上默认加上了选项 –dils 表示列表显示结果(-l),同时显示文件inode号(-i,列表中第一列)、文件所匹配的块大小(-s,列表中第二列)

四、扩展操作 [-exec]

对查询结果的处理,仅有-print、–delete、-ls还不能满足要求,可以通过-exec,执行更多操作。

如何执行-exec(或-ok xargs),可自行搜索。

此处仅介绍一下如何把查询结果按文件大小排序。

正常理解,在ls –lSh中,-S 选项可以使文件按大小排序,-h选项可以把文件大小以易读的方式显示,下式可以排序

find -name "*.txt" -exec ls -lSh {} \;

centos7 如何查看软件创建的网络_centos7 如何查看软件创建的网络_08

结果并非如愿。原因在于,最后的\;是把查询结果一次一行(无法构成多个结果为一体)。只有把;改为+,才可以!

centos7 如何查看软件创建的网络_linux_09

五、正则应用 [-regex]

正则表达式是一种通用的语法,用于描述和查找字符串中的模式。它以文本字符串,特殊字符和元字符的组合形式出现,帮助我们精确地查找所需内容。

要使用find 命令查找文件,需要提供搜索的目录,文件名或正则表达式。在搜索文件时,可以使用-regex 参数指定正则表达式,用于搜索文件中的特定字符串。

例如,要查找包含字符串“test”的文件,可以使用以下find 命令:

find ./ -regex ".*test.*"

上述命令在当前目录中查找任何文件,它的文件名包含字符串“test”,然后将其列出来。

centos7 如何查看软件创建的网络_数据库_10

也可以使用正则表达式搜索具有特定位数的文件名。例如,要查找包含六个字符的文件名,可以使用以下find命令:

find ./ -regex  ".*^.{6}$"

centos7 如何查看软件创建的网络_运维_11

-regex是用普通正则,不能查询有扩展正则表达式的情况。

应用扩展正则的代码是:-regextype posix-extended

上面的正确命令是:find ./ -regextype posix-extended -regex ".*^.{6}$"

centos7 如何查看软件创建的网络_运维_12

案例:find命令还允许使用空格分隔的正则表达式搜索多个匹配模式的文件。例如,要查找扩展名为“txt”“sh”“jpg”的文件,可以使用以下find命令:

find ./ -regextype posix-extended  -regex ".*\.txt$|.*\.sh$|.*\.jpg$"

centos7 如何查看软件创建的网络_centos7 如何查看软件创建的网络_13

find命令的正则表达式的功能正在不断改进,它已成为搜索文件的首选工具。它不仅强大,灵活,而且还可以使用正则表达式精确地指定搜索条件。使用find命令查找文件将大量节省时间。