先用一张思维导图来阐述find的选项
接下来通过几个练习对上述指令进行掌握
按文件名查找
查找txt和pdf文件 print是可选的,注意花括号与字符之间的距离
find . \( -name "*.txt" -o -name "*.pdf" \) -print
查找所有非txt文本
find . ! -name "*.txt" -print
查找根目录下文件名为ls的文件
find / -name ls
查找用户的主工作目录中的文件
find ~ -name "*" -print
按路径查找
如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
$ find /apps -path "/apps/bin" -prune -o -print
避开多个文件夹
find /usr/sam ( -path /usr/sam/dir1 -o -path /usr/sam/file1 ) -prune -o -print
-o 是或者的意思 -a 是而且的意思 -not 是相反的意思
它将首先匹配所有的文件然后再进入子目录中查找。
$ find / -name "CON.FILE" -depth -print
从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
$ find . -name "*.XC" -mount -print
按类型查找
find . -type d -print //只列出所有目录
在当前目录下查找除目录以外的所有类型的文件
$ find . ! -type d -print
在/etc目录下查找所有的符号链接文件,可以用
$ find /etc -type l -print
注意:find支持的文件检索类型可以区分普通文件和符号链接、目录等,但是二进制文件和文本文件无法直接通过find的类型区分出来;
按时间查找
最近第7天被访问过的所有文件:
find . -atime 7 -type f -print
最近7天内被访问过的所有文件:
find . -atime -7 -type f -print
查询7天前被访问过的所有文件:
find . -atime +7 type f -print
查找更改时间比文件sam新但比文件temp旧的文件:
find -newer httpd1.conf ! -newer temp -ls
按大小查找
寻找大于2k的文件:
find . -type f -size +2k
查找大于5555字节小于5557字节的文件
find /root -size -500K -size +50K -exec ls -ld {} \;
注:{}是一个特殊的字符串,对于每一个匹配的文件,{}会被替换成相应的文件名;
按权限查找
找具有可执行权限的所有文件
find . -type f -perm 644 -print
找用户root所拥有的文件
find . -type f -user root-print
按用户查找
找用户root所拥有的文件
find . -type f -user root-print
在$HOME目录中查找文件属主为root的文件
$ find ~ -user root -print
在/etc目录下查找文件属主为root的文件:
$ find /etc -user root -print
在/home目录下查找找属主帐户已经被删除的文件
$ find /home -nouser -print
在/apps目录下查找属于root用户组的文件,可以用:
$ find /apps -group gem -print
从跟系统查找没有有效所属用户组的所有文件,
$ find / -nogroup -print
找到的后续动作
删除当前目录下所有的swp文件:
find . -type f -name "*.swp" -delete
find . type f -name "*.swp" | xargs rm
xargs可以把从 stdin 接受到的输入,用空白符分隔开,然后依次作为参数去调用xargs后面的命令
find
将当前目录下的所有权变更为mj:
find . -type f -user root -exec chown mj{} \;
将找到的文件全都copy到另一个目录:
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;