前面写了find 使用-type -atime(-ctime -mtime) -size等选项参数的用法,这些用法和之前的find的用法其实构成了find最经常使用到的用法。除了这些最基本的,也有一些相对比较高级的用法。
一 根据文件的访问权限查找
主要参数-perm
如查找当前路径下可以执行的文件,比如自己写的一些脚本啊,……
find . -type f -perm 755 # -perm 表示根据权限匹配,755表示具体的权限,具体含义是所有者可读可写可执行,用户组,其他可读,可执行,具体的文件权限的相关知识可以参考我的有关与文件权限的博客
二 依据所有者用户名查询
主要参数 -user
比如你是个管理员,你想查找你管辖下的某个用户的创建的文件
find . -type f -user user1 # -user表示依据用户名匹配, user1是用户名
三 对查找到的内容直接进行操作
(1) 直接删除查找到的内容
主要参数 -delete 参数
find . -type f -name "*.tmp" -delete # 最后的-delete选项就是起删除匹配内容的选项参数
(2) 进行更为复杂操作
前面的-delete参数可以方便的删除匹配到的内容,那么如果进行更为复杂的操作该怎么样呢?
主要参数 -exec command {} \;
其中command 就是要对内容进行操作的命令 {} \必须有是固定格式。
举例说明:
比如有个用户user1 离开了,新来个user2,你作为管理员要把user1的所有文件都改为user2的
find . -type f -user user1 -exec chown user2 {} \;
# find -type f -user user1 即查找user1所创建的所有文件,
-exec chown {} \。实现把这些文件的所有者改为user2
下面详解 -exec command {} \命令
首先,{} 是一个特殊的参数,它的含义是占位符和替换符。
(a)它首先作为占位符,-exec 后面命令的参数的占位符,保证了-exec 命令的完整性.
chown 命令的正确格式 是 chown user file
chown user2 {},{}作为file参数的占位符保证了chown命令的完整性和正确性。
(b)替换符
它又是一个替换符,{}替换分别匹配到的文件名,并作为具体参数传给-exec 后的命令.
比如 find -type f -user1 找到文件,file1.txt 和file2.txt那么
{}将分别替换file1.txt 和file2.txt
最终执行的效果等于
-exec chown user2 {} \;的最终效果等于
chown user2 file1.txt ;chown user2 file2.txt
{}的占位符和替换符作用
还有一种情况:-exec 后面的命令需要find 匹配到的内容整体作为一个参数,而不是对匹配到的内容分别执行一次命令.该怎么做?
首先-exec command {} \; #这个;是必须可少的,因为;表示一个命令的结束,如果把;换为+,就能把所有的匹配内容作为一个参数列表(一个整体的参数)进行执行。
问题又来了,如果想用-exec 选项执行多个命令怎么做?
可以使用:
-exec ./command.sh {} \; #把要执行的多个命令的具体执行逻辑写在一个脚本里,用自己写好的脚本文件名,替换command.sh,别忘了赋予脚本可执行权限哦