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\)