1、根据 文件或目录名称 搜索
1、精准搜索,名字必须为 init 才能搜索的到
find /etc -name init
2、精准搜索,名字必须为 init或者有字母大写也能搜索的到
find /etc -iname init
2、模糊搜索,以 init 结尾的文件或目录名
find /etc -name *init
2、模糊搜索,? 表示单个字符,即搜索到 init___
find /etc -name init???
2、根据 文件大小 搜索
1、 在根目录下查找大于 100M 的文件 (这里 +n 表示大于,-n 表示小于,n 表示等于1 数据块 ==512 字节 == 0.5KB,也就是1KB等于2数据块 100MB == 102400KB==204800数据块)
find / -size +204800
3、根据 所有者和所属组 搜索
1、在home目录下查询所属组为 root 的文件
find /home -group root
2、在home目录下查询所有者为 root 的文件
find /home -user root
4、根据 时间属性 搜索
1、以 production.log-2013前缀的文件 查找2013-08-08
到2013-09-01
号之间的文件
find /log/ -name 'production.log-2013*' -newermt '2013-08-08' ! -newermt '2013-09-00'
2、 2011/09/08 12:00 时间开始找一天內的,会列出 2011/09/07 12:00 ~ 2011/09/08 12:00 时间內的文件 ,找出 3 天”以前”被改动过的文件 (前第三天以前 → 2011/09/05 12:00 以前的文件) (> 72 小时)
find /var/log/ -mtime +3 -type f -print
3、找出 3 天內被改动过的文件 (2011/09/05 12:00 ~ 2011/09/08 12:00 內的文件) (0 ~ 72 小时內)
find /var/log/ -mtime -3 -type f -print
4、找出前第 3 天被改动过的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 內的文件) (72 ~ 96 小时)
find /var/log/ -mtime 3 -type f -print
5、找出第 3 天被改动过的文件 (也可以这样写)
find /var/log/ -mtime +2 -mtime -4 -type f -print
5、根据 文件类型或i节点 搜索
1、 查找文件
find ./ -type f
2、查找目录
find ./ -type d
6、组合条件 搜索
1、 -a 表示两个条件同时满足(and)
2、 -o 表示两个条件满足任意一个即可(or)
3、把找到的文件cp到指定的文件夹下
find /data/files/ -name "*.html.*" -newerct '2019-08-07 00:00:00' ! -newerct '2019-08-08 00:00:00' -exec cp {} /home/files/20190808 \;
7、文件内容搜索(grep || find)
7.1、find
1、查找文件中的Summer
find /www/ -name '*.php' |xargs grep 'Summer'
2、同时查找多个文件并复制(exec用法)
find ./file -regex '.*file.txt|.*file1.txt' -exec cp -r {} /home/file \;
3、查找目录下的所有文件中是否含有某个字符串
-r 是递归查找 -n 是显示行号 * : 表示当前目录所有文件,也可以是某个文件名
find -type f -name '*.php'|xargs grep 'message'
7.2、grep (or,and,not)
7.2.1 grep -r “String” ./
查找当前文件夹中的所有文件内包含String的内容的行数 -r 是递归查找 -n 是显示行号 -R 查找所有文件包含子目录 -i 忽略大小写
7.2.2、or操作
1、 使用 |
如果不使用grep命令的任何选项,可以通过使用 ‘|’ 来分割多个pattern,以此实现OR的操作。
grep 'pattern1\|pattern2' filename
grep 'Tech\|Sales' employee.txt
2、使用选项 -E
grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作。
grep -E 'pattern1|pattern2' filename
grep -E 'Tech|Sales' employee.txt
3、使用egrep
egrep 命令等同于‘grep -E’。因此,使用egrep (不带任何选项)命令,以此根据分割的多个Pattern来实现OR操作.
egrep 'pattern1|pattern2' filename
egrep 'Tech|Sales' employee.txt
4、使用选项 -e
使用grep -e 选项,只能传递一个参数。在单条命令中使用多个 -e 选项,得到多个pattern,以此实现OR操作。
grep -e pattern1 -e pattern2 filename
grep -e Tech -e Sales employee.txt
7.2.3、and操作
1、使用 -E 'pattern1.*pattern2’
grep命令本身不提供AND功能。但是,使用 -E 选项可以实现AND操作。
grep -E 'pattern1.*pattern2' filename
grep -E 'Dev.*Tech' employee.txt
grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
grep -E 'Manager.*Sales|Sales.*Manager' employee.txt
2、使用多个grep命令
可以使用多个 grep 命令 ,由管道符分割,以此来实现 AND 语义。
grep -E 'pattern1' filename | grep -E 'pattern2'
grep Manager employee.txt | grep Sales
7.2.4、Grep NOT操作
1、使用选项 grep -v
使用 grep -v 可以实现 NOT 操作。 -v 选项用来实现反选匹配的( invert match)。如,可匹配得到除下指定pattern外的所有lines。
grep -v 'pattern1' filename
grep -v Sales employee.txt
7.2.5、联合使用
1、是…或者是…但是不是…(Manager或者Developer,但是不是Sales )
egrep 'Manager|Developer' employee.txt | grep -v Sales
2、not in 是…或者是…但是不包含… (Manager或者Developer,但是不包含a,b,c)
egrep 'Manager|Developer' employee.txt | grep -v "a"|grep -v "b"|grep -v "c" ........