文章目录

find

按照修改时间搜索-->

按照权限搜索

按照文件类型搜索

逻辑运算符

其它选项

实例

grep

选项

实例

PS

find

find 在指定目录下查找文件。匹配 文件名

-amin 查找 在指定时被 存取过的文件或目录(分钟)【cmin,mmin】

-atime 查找在指定时间存取过的文件或目录 (天) 【ctime,mtime】

-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;

-name 按照文件名搜索

-iname 按照文件名搜索,不区分大小写

-inum 按照inode 号搜索

-size [+ | - ] 按照指定大小搜索


linux grep 时间过滤 grep时间范围_搜索

按照修改时间搜索–>

* Linux中文件有访问时间 (**atime**),数据修改时间 (**mime**) ,状态修改时间 (**ctime**),这三个时间。我们可以用这三个时间来搜索相关文件

linux grep 时间过滤 grep时间范围_文件名_02

这三个时间的区别我们在stat 命令中可以查看到,重点说说 【+ - 】时间的含义

* -5 :代表 5 天内修改的文件。

* 5 : 代表前 5~6 天那一天修改的文件

* +5 :代表 6 天前修改的文件。

* 画一个时间轴来解释一下


linux grep 时间过滤 grep时间范围_文件名_03

按照权限搜索

-perm /权限模式 根据权限查找: -perm [/|-]mode

mode:精确权限匹配;

/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;

-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;

按照所有者和所属组搜索

-uid 用户ID 按照用户ID查找 所有者是指定ID的文件

-gid 组ID 按照用户组ID查找所属组是指定ID的文件

-user 用户名 按照用户名查找所有者是指定用户的文件

-group 组名 按照组名查找所属组是指定用户组的文件

-nouser 查找没有所有者的文件

-nouser 主要用于查找 垃圾文件

还有一各此方法是外来文件,比如 光盘和U盘中的文件如果是由Windows 复制的,在Linux中查看就是没有所有者的文件,再者 就是手工源码包安装 的文件,也有可能 没有所有者.

按照文件类型搜索

* -type d 查找目录

* -type f 查找普通 文件

* -type l 查找软链接文件

* > 根据文件的类型查找:

-type TYPE:

f: 普通文件

d: 目录文件

l:符号链接文件

b:块设备 文件

c:字符设备文件

p:管道文件

s:套接字文件

逻辑运算符

* -a and 逻辑 与

* -o or 逻辑或

* -not 或 ! not逻辑非

>find / -size +2k -a -type f

> 在根目录下搜索大于2KB,并且是普通的文件.

其它选项

-exec

find 搜索路径 [选项] 搜索内容 -exec 命令2 {} ;

这个选项的作用其实是把 find 命令的结果 交给 -exec 调用的 命令2 来处理 “{}” 就代表 find 命令查找的结果

-ok 与 -exec 作用一致 只是-ok 在 命令2处理的时候会询问是否执行.

实例

find /home -type f -name "*.txt"

# 查找/home 目录下的所有 .txt 的文件

# iname >>就是不区分大小写 Txt也是能查找

find /home -perm /744

# 查找 /home 目录下 权限(u g o ) 三个权限位中起码其中一个满足 (r w x )==>744(rwx r-- r-- )

find /home -name "*.txt" -o -name "*.pdf"

#查找 /home 目录下 .txt 文件或.pdf 的文件 [-a]逻辑与同理

find /home -type f -atime -7

# 查找 7天内被访问过的文件

# ctime / mtime / amin / cmin /min /+7 /7 ....

find /home -user mac -exec chown tom {} \;

# 查找 /home 目录下的所有者是mac 的文件 然后把查找的文件作为参数

# 全部交给 exec后面的命令 来执行,即 chown 改变所有者为tom

find /home -name "*.txt" -type f -exec cp {} /tmp \;

# 查找/home目录下所有.txt 的文件,然后全部复制到 /tmp 下

find ~ -perm -o=r

# 查找 家目录中对所有人可读的文件.

grep

grep [选项] “搜索内容” 文件名

选项

-i 忽略大小写

-n 输出行号

-v 反向查找

–color=auto 搜索出的关键字用颜色显示

* -o 只显示匹配到的内容.


linux grep 时间过滤 grep时间范围_文件名_04

实例

-A 数字N --> 找到所有的匹配行,并显示匹配行后面N行

grep -A 2 “a” test

表示 显示 匹配到 包含 a 的行并显示 其后面的 2 行

-B 数字N --> 找到所有匹配行,并显示匹配行的 前面 N 行

-c 显示有多少行被匹配到

-e 表示 可以使用多个 正则 表达式 grep -e "a" -e "1" -e "2" test

-f 表示 拿test1 里的每一行去匹配test2 并显示

grep -f test1 test2

-m 数字N 表示 最多匹配 N 个后停止

-R 表示 搜索当前目录及子目录

-v 表示 不包括 查找字符的所有行.取反

参数

解释

^

匹配行首

$

匹配行尾

[ ] or [ n-n ]

匹配 [ ] 内任意 一个字符

.

匹配任意的单字符

*

匹配其前一个字符任意次 包括 0 次

\

转义符 屏敝原字符的特殊意义

\?

匹配其前面的字符 0 次或 1 次 即前面可以可无

\+

匹配其前面的字符 1 次或 多 次 即前面字符至少出现 一次

\{ m\ }

匹配前面的字符 m 次

\{ m, n\ }

匹配前面的字符 至少 m 次 至多 n 次

\| 表示 或

-r 忽略子目录

实例

[root@localhost jxls] ls

test test1

[root@localhost jxls] cat -n test

1a

2bc

3def

4ght12

5abc999

6tydvl658

7123

8456

9789abc

1055.66

[root@localhost jxls] grep -n --color "33*" test

7:123

[root@localhost jxls] 这个3* 即指匹配 3 这个字符 0 次或 多 次

[root@localhost jxls] grep -n --color "^a" test

1:a

5:abc999

[root@localhost jxls] 上例 :匹配行首为 a 开头的

[root@localhost jxls] 同理 $

[root@localhost jxls] grep -n --color "3$" test

7:123

[root@localhost jxls] grep -n --color "a^ \| [0-9]$" test

[root@localhost jxls] grep -n --color "a^ \| [0-9]" test

[root@localhost jxls] echo bbb >> test

[root@localhost jxls] grep -n "[0-9]\|b\{1,\}" test

2:bc

4:ght12

5:abc999

6:tydvl658

7:123

8:456

9:789abc

10:55.66

11:bbb

[root@localhost jxls] grep -n "[0-9]\|b\{2,\}" test

4:ght12

5:abc999

6:tydvl658

7:123

8:456

9:789abc

10:55.66

11:bbb

PS

PS:需要注意的是,在基本正则表达式中,如通配符 *、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 \,如 \*、\+、\{、\|、\( 和 \)

参考: