一、 命令功能: 从指定的查找范围开始,递归查找子目录,对于满足条件的文件或目录,执行规定的动作。
二、 命令格式: find [搜索路径] [选项] [动作选项]
示例:find path1 path2 -name *.c -print 根据名字递归查找path1和path2中以 .c 为后缀的文件或目录并打印
三、 命令选项:
-name 文件名匹配
-type 文件类型匹配 :f 普通文件、d 目录、l 链接文件、c 字符设备文件, b 块设备文件、 p 管道文件
-inum 指定节点号
±
±
其它选项
-user 文件主
-group 用户组
-depth 路径深度
-maxdepth 最大搜索深度
-perm 指定文件访问权限
复合条件可以使用 !非、 \ 与、-o 或
四、 动作选项:
-print 打印查找到的路径
-exec 对查找到的目标执行某一命令 -exec + [命令] + {} + \; 其中 {} 表示查找到的路径名,命令最后以 \; 结尾
-ok 同 -exec ,但执行前要确认
五、 使用举例:
• find. -type d -print
• 从当前目录开始查找,寻找所有目录,打印路径名
• 按层次列出当前的目录结构
• find / -name 'stud*' -type d -print
• 指定了两个条件:名字与 stud* 匹配,类型为目录
• 两个 条件逻辑“与” ,必须同时符合这两个条件
• find / -type f - mtime -10 -print
• 从根目录开始检索最近 10 天之内曾经修改过的普通磁盘文件
• find . - atime +30 - mtime +30 -print
• 从当前目录开始检索最近 30 天之内既没有读过,也没有写过,而且也没有被当作命令执行过的文件
• 筛选出一个时间周期内不活跃的文件
• find . ! -type d -links +2 -print
• 从当前目录开始检索 link 数大于 2 的非目录文件
• 条件“非” 用!
• 注意: ! 号与 -type 之间必须保留一空格
• 找出 lyj 用户主目录下所有的 .txt 文件并删除
• find /home/ lyj -name "*.txt" -ok rm {} \;
• 上例中, -ok 和 -exec 行为一样,不过它会给出提示,是否执行相应的操作。
• 查找当前目录下所有 .txt 文件并把他们拼接起来写入到 all.txt 文件中
• find . -type f -name “*.txt” -exec cat {} \;> all.txt
•将30天前的.log文件移动到old目录中
• find . -type f - mtime +30 -name "*.log" -exec cp {} old \;
• find / -size +100000c \( -name core -o -name '*. tmp ' \) -print
• 寻找 大于 100K 的名 叫 core 或有 . tmp 后缀
• 使用了两 条件“或” (- o ) 及组合 ( 圆括号 )
• 不要遗漏了所必需的引号,反斜线和空格,尤其是圆括号前和圆括号后。圆括号 是 shell 的 特殊字符
• 其他写法
find / -size +100000c '(' -name core -o -name \*.tmp ')' -print
find / -size +100000c \( -name core –o -name \*.tmp ')' -print
• find / -name make -print -exec ls -l {} \;
• -exec 及随后的分号之间的内容作为一条命令执行
• shell 中分号有特殊含义,前面加反斜线 \
• {} 代表所查到的符合条件的路径名。注意,两花括号间无空格,之后的空格不可省略
• 对所有满足条件的文件或目录,依次执行 print 和 exec 命令
• -ok 选项在执行指定的命令前等待用户确认
• find / -size +100000c \( -name core -o name '*. tmp ' \) -ok rm {} \ ;
•利用find的递归式遍历目录的功能
将当前目录下所有文件拷贝到目录 ../ bak 中
• 执行 cp * ../ bak 命令:如果当前目录下文件太多 shell 扩展*时失败,从而不能执行期望的功能
• 用 find 命令与 cp 命令配合工作
• find . -type f - maxdepth 1 -exec cp {} ../ bak \;
• 选项 - maxdepth 1 将 find 的搜索深度限制为最多 1 层,如果当前目录有子目录,就不再检索子目录