Linux环境下的find命令简明教程

绪论

  find命令是Unix系统中最为古老与复杂的命令之一,它功能强大,可以根据不同的标准在任何位置搜索任何文件。

  find命令的基本思想即搜索一个或者多个目录树,根据用户指定的测试条件,查找符合特定标准的文件。当查找完成之后,find命令将对查找到的文件执行指定的操作。这些操作可简可繁,简单的例如仅输出文件名;复杂的例如删除文件、将搜索结果传递给另一个命令。在使用find命令时,用户需要提供3类信息,分别为目标路径、测试条件以及操作。find命令的基本如下所示:

find path test action

  其中,path参数表示目标路径,用户可以同时指定多个路径,路径之间用空格隔开。test参数表示测试条件;同样,用户可同时指定多个测试条件,它们之间用空格隔开;action参数则表示对于搜索结果要执行的操作,如果有多个操作,则它们之间同样使用空格隔开。

  find命令的工作流程如下所示:

  (1)搜索所有用户指定的路径,包括所有的子目录

  (2)对于遇到的每个文件,检查是否符合用户指定的条件。在该步骤中,所有符合条件的文件形成一个列表。

  (3)对于结果列表中的每个文件,执行用户指定的操作。

  如下为一个find命令的简单应用实例

find / -name ls -print

  在该应用实例中,目标路径为根目录,表示在当前系统的所有的目录及其子目录中进行搜索。测试条件为-name ls,表示搜索文件名为ls的文件。操作为-print,表示将搜索到的文件名打印出来。

find命令的目标路径

  find命令的路径参数表示在何处搜索指定的文件。通常情况下,路径都是一个目录名,用户可以使用相对路径、绝对路径,以及简写形式来指定路径,如下所示。

find /usr/bin
find /
find .
find -root

  以一个示例脚本为例。该脚本文件的作用是在当前路径下搜索扩展名为.sh的文件并输出结果。

#! /bin/bash

files=`find . -name ".sh"`
echo "$files"

find命令的测试条件

常见的测试条件

  find命令的测试条件用于对搜索结果进行筛选,只有符合筛选条件的文件才会出现在最终的搜索结果中。下表为部分常用的测试条件。

条件 说明
-name pattern 表示包含指定匹配模式的文件名
-iname pattern 表示包含指定匹配模式的文件名,该条件不区分字母大小写
-type 指定文件类型,可以取f和d两个值,分别表示普通文件和目录

-perm mode

匹配其权限被设置为指定mode的文件
-user userid 匹配其所有者为指定用户ID的文件
-group groupid 匹配其所有者的组着为指定组ID的文件
-size size 匹配其大小为size的文件夹
-empty 匹配空文件

  需要注意的是,在-type选项中,除了f和d,还可选择c表示字符设备,b表示块设备,p表示管道,l表示链接。

  在find测试条件汇总,-name与-type是最为常用的,使用方法如下所示。

#! /bin/bash

files=`find /etc -type f -print | wc -l`
directories=`find /etc -type d -print | wc -l`

echo "There are $files regular files in /etc directory."
echo "There are $directories directories om /etc directory."

  此外,方括号“[]”是一种非常有用的通配符,用户可将一系列的字符放在方括号中,find命令会匹配方括号中的任意一个字符,例如:

root@main:~# find /etc -name "rc[1-9].d" -print
/etc/rc3.d
/etc/rc1.d
/etc/rc5.d
/etc/rc2.d
/etc/rc6.d
/etc/rc4.d

使用!运算符对测试条件取反

  find命令提供一个感叹号运算符!,用来对测试条件进行取反。!符号可以加在任何测试条件前,表示气候测试的相反条件。在使用!运算符的时候,需要在!符号的左右各留一个空格。

find命令的动作

  常用的find动作命令

-print     默认动作,将搜索结果写入到标准输出
-fprint file 与-print相同,但是将搜索结果写入到文件file
-ls 以详细格式(长格式)显示搜索结果
-fls file 同-ls,但是将搜索结果写入都文件file
-delete 将搜索到的文件删除
-exec command {} \; 查找并执行命令,{}表示搜索到的文件名
-ok command {} \; 查找并执行命令,但是需要用户确认

  用户在使用-delete命令的时候需要注意的是该动作不会给出任何确认提示;-exec使find命令对搜索结果中的文件执行指定的Shell命令,相应的Shell命令的语法为:

`command` {} \;
  其中command表示Shell命令,花括号{}表示索索结果中的文件名,最后的分号表示命令的结束。需要注意的是最后的分号需要 反斜杠来转义。此外,分号与花括号之间有一个空格;-ok与-exec的作用相同,但是在执行每一个命令之前,都会给出提示让用户确定是否执行。


猜你喜欢

转载自blog.csdn.net/ZHISHAN_IoT/article/details/80546804