Linux find 命令详解


find path -option [-print] [-exec -ok command] {} \;
find命令的参数:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户

1、根据文件名或正则表达式匹配搜索

选项-name的参数指定文件名所必须匹配的字符串。

例:匹配所有以.txt结尾的文件名
$find /root/ -name "*.txt" -print
选项-iname,该选项的作用和-name类似,不过匹配的时候忽略名字的大小写。

匹配多个条件,可以使用OR条件操作
$find . /root/ \( -name "*.txt" -o -name "*.pdf" \) -print

选项-path的参数可以使用通配符来匹配文件路径或文件。
$find . -path "*include/apu*"       
./httpd-2.2.22/srclib/apr-util/include/apu_version.h
./httpd-2.2.22/srclib/apr-util/include/apu.hw
./httpd-2.2.22/srclib/apr-util/include/apu_errno.h
./httpd-2.2.22/srclib/apr-util/include/apu.hnw

选项-regex的参数和-path类似,不过-regex是基于正则表达式来匹配文件路径。
下面命令匹配.py或.sh文件
$find . -regex ".*\(\.py\|\.ssh\)$"
./.ssh
./httpd-2.2.22/srclib/apr/build/gen-build.py
2、否定参数
find也可以使用"!"否定参数的含义。
例如:匹配所有不是以.txt结尾的文件名
$find . ! -name "*.txt"
3、基于目录的深度搜索
使用-maxdepth和-mindepth参数来限制find命令遍历目录的深度。
例:列出当前目录下的所有普通文件。
$find . -maxdepth 1 -type f
-maxdepth和-mindepth应当作为find的第三个参数出现,如果作为第四个或之后的参数,则会影响find的效率。
4、根据文件的类型搜索
使用-type对文件搜索进行过滤,以下是type参数对应文件的类型
普通文件  f、符号文件 l、目录 d、字符设备 c、块设备 b、套接字 s、Fifo p。
例:列出所有目录
$find . -type d -print
5、根据文件时间进行搜索
系统每个文件有三种时间戳,如下所示:
访问时间(-atime):用户最近一次访问时间
修改时间(-mtime):文件内容最后一次修改时间。
变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变时间
打印出最近7天有过访问的所有文件
$find . type f -atime -7 print

打印出访问时间超过7分钟的所有文件
$find . type f -admin -7 print
6、基于文件大小的搜索
$find . -type f -size +20k
#大于20KB的文件
$find . -type f -size -20k
#小于20KB的文件
$find . -type f -size 20k
#等于20KB的文件
7、删除匹配的文件
-delete可以删除find查找到的.swp文件
$find . -type f -name "*.swp" -delete
删除当前目录下的所有的.swp文件
8、基于文件权限和所有权的匹配
例:打印出权限为644的文件
$find . -type f -perm 644 -print

查找没有执行权限的PHP文件
$find . -type f -name "*.php" ! -perm 644 -print

打印出用户slynux所拥有的文件:
$find . -type f -user slynux -print
9、结合find执行命令或动作
借助选项-exec与其他命令结合。
示例:
#find . -type f -user mysql -exec chown root {} \;
在当前目录下修改属于用户mysql的文件为属于root用户。

#find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
将10天前的.txt文件复制到OLD目录下
10、find跳过特定的目录
打印出不包过在.svn的目录的所有文件的名称
#find . \( -name ".svn" -prune \) -o \( -type f -print\)

相关内容