Find命令 查找文件 相当于搜索,搜索文件

语法:

find path experssion [action]

find :关键字 path:路径 e.g . 表示当前路径 expression:按照查询条件查询 e.g -name 按照名字查询 -size按照文件大小查询 -perm 按照权限查询 -type 按照文件类型查询 -user 按照拥有者级别查询 action :处理将查询到的内容 e.g rm 删除查询到的内容

文件类型:
b:块设备文档

        d:目录

        c:字符设备文档

        P:管道文档

        l:符号链接文档

        f:普通文档

find path experssion [action]  

查找当前目录下以A开头的所有文件和目录

find A* 

查找当前文件下以data开头的文件夹

find . -name data*

查找当前文件下名为data的文件夹

find . -name data

在当前按照修改时间进行查询,查询条件是修改文件时间正好是10天并且输出

find . -mtime 10 -print

如果数字前面加-表示小于10天,加+表示大于10天

在当前按照用户级别,按照文件大小查询.查询条件是用户是超级管理员并且文件大小是大于400并且输出.

find . -size 0 -size +400 -print

在家目录查找权限是777的文件,将查询到的文件内容(路径)重定向到holes文件中.

find ~ -perm 777 > ~/holes

删除当前路径下文件类型是普通文件,并且访问时间大于365天的文件

find . -type f -atime +365 -exec rm {};

将查询到的文件交给exec后面的rm命令执行删除.删除的内容位于{}中.exec的命令必须以;结束.需要在;之前加作为转义字符
如果删除的是目录,需要使用rm -r {} ;
需要注意 exec这个命令是一个一个读取文件执行操作和直接构建rm -r 不同,rm -r删除目录时是直接将目录删除
  

-exec 参数

后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。

{} 花括号代表前面find查找出来的文件名

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:

xargs命令

find . -type f | rm 这个命令是错误的

find . -type f | xargs rm 这样才是正确的

xargs:让一些命令支持管道操作,本身并没有意义.

高级

find . -name "*.html" -print | xargs perl -p -i.bak -e “s/Copyright 2004/Copyright 2005/g;”按照名字查询所有文件以.html 结尾的,将查询到的文件交给perl处理.

perl执行替换操作,替换同时先以.bak执行备份,备份完的数据在进行替换,按照-e根据给定的内容执行,将所有的Copyright 2004替换成Copyright 2005。

“find: 路径必须在表达式之前”的错误提示

使用转义符把*转义,即 *.jpg

用引号引起来 ,即 “*.jpg”

注意:

perl命令后面的参数 -p -i -e必须同时出现,才能修改,备份成功

如果没有备份,修改只是显示成功,但是并没有真正写入到文件中

  

perl:替换

如果你不想备份,就直接写成 perl -p -e 或者更简单 perl -pe

-e:执行制定的脚本

-i<扩展名>:原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份

-p:自动循环+自动输出

perl命令中-p -e -i必须联合使用才能产生效

 

  

查找当前文件下及其子目录下所有文件名包含CRED的,并且文件大小超过1k并且文件类型为f的文件、

1. find -L . - type f -size +1k -name CRED
-L为依次查找并排序

2.find . -name CRED -size +1k -typef

  

原文地址:https://www.cnblogs.com/joanna123/p/12153311.html