代码改变世界

shell学习之find

2016-12-20 15:48  KingSir1212  阅读(155)  评论(0)    收藏  举报

1列出当前目录及子目录下所有的文件和文件夹

find .

.指定当前目录,..指定父目录,这是Unix系统中约定的用法

 

2根据文件名或者正则表达式进行搜索,还可以用选项-path来搜索路径

#列出当前目录下所有文本文件,选项-name的参数指定了所要匹配的字符串,相同-iname是忽略大小写字母

find . -name "*.txt"

#如果想要匹配多个条件,可以采用OR条件操作 -o

find . \( -name "*.txt" -o -name "*.pdf" \)

#解释下其中括号前后的\表示转义,防止bash解释成数组。注意括号里的内容前后都要有空格

# -path来搜索路径

find . -path "*/test/*"

 

3还可以使用否定参数,查找不包含txt的文件

find . ! -name "*.txt"

 

4基本目录尝试的查找

find . -maxdepth 1 -name "*.txt" #最大深度为1

find . -mindepth 2 -name "*.txt" #最小深度为2

 

5根据文件类型查找 -type

find . -type f #变通文件

find . -type l #链接文件

find . -type d #目录

6根据文件时间进行搜索 -atime 访问时间, -mtime 修改时间, -ctime 变化时间,元数据,权限修改

find . -type f -atime -7 #7天内访问过

find . -type f -atime 7  #7天前访问过

find . -type f -atime +7  #超过7天访问过

7根据文件大小进行搜索 -size

find . -type f -size +2k

find . -type f -size +2M

8删除匹配的文件 -delete

find . -type f -name "*.tst" -delete

9根据权限及用户搜索 -perm,-user

find . -type f -perm 6444

find . -type f -user oracle

10find结合执行命令 -exec

find . -type f -name "*.txt" -exec cat {} \;>all_txt_files.txt #把匹配的文件拼接到一个文件 #说明:\是转义,;表示exec语句结束

如果没有转义,被bash截断。

find . -type f -user root -exec chown oracle {} \; # 改变文件所属用户。

11find用作修剪

find . -path "*/test/xx" -prune -o -print #说明:找到xx目录,然后修剪掉,输出不包含,如果没找到则全部输出