语法格式:find 路径 选项 文件名
选项
-name | 根据文件名查找 | -nouser | 查找没有所属用户的文件 |
-perm | 根据文件权限查找 | -nogroup | 查找没有所属组的用户 |
-user | 根据文件所属用户查找 | -newer | 查找比指定文件更新的文件 |
-group | 根据文件所属组查找 | -type | 按照文件类型查找 |
-mtime | 根据文件最后修改时间查找 | -size | 按照文件大小查找 |
-atime | 根据文件最后读取时间查找 | -prune | 不搜索指定目录 |
-ctime | 根据文件属性最后修改时间查找 | -exec...{}\; | 对查找出的结果进行处理 |
常用选项解析
一、根据文件名查找
例:找出/etc目录下的hostname文件
find /etc/hostname -name 'hostname'
例:找出/etc目录下以.conf为结尾的文件
find /etc -name '*.conf'
二、按照时间选项查找
-mtime选项:
- -mtime +7 :表示7天之前(不包含当天)被修改过的文件
- -mtime -7:表示7天内被修改过的文件
- -mtime 7:表示7天之前的当天修改过文件夹
例:找出7天之前/etc目录下以.conf为结尾且被修改的文件
find /etc -mtime +7 -name '*.conf'
三、按照大小查找
例:找出/etc目录下大于100k的文件
find /etc -size +100
四、查找文件的时候指定最多找多少层目录
find /etc -maxdepth 2 -type f -name '*.conf'
find命令与其他命令的配合
一、find + 其他命令
例:找出~/test/find目录下的.txt文件并显示详细信息
方法一:对优先执行的命令使用反引号,或者$()
ls -l `find ~/test/find -name '*.txt' -type f`
ls -l $(find ~/test/find -name '*.txt' -type f)
方法二:使用管道符号
注意事项:当我们使用管道符号时,只会执行后面的ls指令而没有执行前面的find命令
这是因为find查找出的数据是字符串形式的,而ls命令需要的是参数,常规的管道符是无法将字符串转换为参数的。find找出的内容相当于被舍弃了,只执行了的后面的ls命令
解决方法:
通过|xargs把前面命令传过来的字符串转换为后面命令可以识别的参数
find ~/test/find -name '*.txt' -type f |xargs ls -l
方法三:使用 -exec选项
find ~/test/find -name '*.txt' -type f -exec ls -l {}\;
-exec是find选项,表示find找出文件后要执行的命令
{} 表示前面find命令找出的文件.
\;表示命令结束,固定格式.
二、find与打包压缩
例:找出~/test/find 目录下以.txt结尾的文件,并解压到/tmp/find.tar.gz
方法一:使用反引号
tar -zcf /tmp/find.tar.gz `find ~/test/find -name '*.txt' -type f`
方法二:管道符号
find ~/test/find -name '*.txt' -type f |xargs tar -zcf /tmp/find.tar.gz
方法三:-exec选项
find ~/test/find -name '*.txt' -type f -exec tar -zcf /tmp/find-exec.tar.gz {} +
注意:末尾是 “+” 而不是 “\;”,因为这样是找到一个文件就压缩一个文件,所以后面的文件会覆盖前面的文件
三、find与移动
例:找出~/test/find 目录下以.txt结尾的文件,复制到/tmp下面