1 find基本用法
find [path… ][expression]
递归地在层次目录中处理文件
2 基本技巧1-搜索指定文件名
-name搜索文件名中可以包含正则表达式!
-iname测试项。'i’可以加在许多选项前面,比如-ipath,-iregex,-iwholename等等,都是表示大小写不敏感。
#### 1-在当前目录修改全名为test接口
find . -name "test"
#### 2-修改名字中包含test的文件
find . -name "*test*"
#### 3-用户目录搜索test文件
find ~/ -name "test"
3 基本技巧2-根据文件修改时间搜索
-mtime n 对文件数据的最近一次修改是在 n*24 小时之前。
-ctime n 对文件状态的最近一次修改是在 n*24 小时之前。
-atime n 对文件的最近一次访问是在 n*24 小时之前。
-cmin n 对文件状态的最近一次修改是在 n 分钟之前。
#### 1-修改当天改过文件
find . -ctime 0
#### 2-修改两天前改过的文件
find . -ctime +2
#### 3-修改两天内改过的文件
find . -ctime -2
#### 4-组合使用
find . -ctime -3 -name "*test*"
4 基本技巧3-通过用户归属搜索
- -uid n : 搜索所属用户编号为n的文件
- -gid n :搜索所属用户组编号为n的文件
- -user name :搜索所属用户名为name的文件
- -group name:搜索所属用户组名为name的文件
#### 1 当前目录递归搜索root用户的文件
find . -user "root"
5 基本技巧4-根据文件类型搜索
-type c
文件是 c 类型的。类型可取值如下:
b 特殊块文件(缓冲的)
c 特殊字符文件(不缓冲)
d 目录
p 命名管道 (FIFO)
f 普通文件
l 符号链接
s 套接字
D 门 (Solaris 特有)
#### 1-搜索以host结尾的目录
find -type d -name "*host"
6 基本技巧5-根据文件大小搜索
size选项后面可以b c w k M G
几个搜索选项,含义看help注释就可以很清楚理解了。
注意 只带n表示等于;+n表示大于,-n表示小于;
-size n[cwbkMG]
File uses n units of space, rounding up. The following suffixes
can be used:
`b' for 512-byte blocks (this is the default if no suffix is
used)
`c' for bytes
`w' for two-byte words
`k' for kibibytes (KiB, units of 1024 bytes)
`M' for mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)
`G' for gibibytes (GiB, units of 1024 * 1024 * 1024 =
1073741824 bytes)
####
####搜索大于500k小于2m的所有文件!!
find -size +500k -size -2M | xargs ls -hl
find ./ -size +500k -size -2M | xargs ls -hl
7 进阶技巧1-正则表达式搜索-regex
-name属于表达式中的测试项(test),但是不属于真正的正则表达式;-regex相对于-name选项有如下优势:
- -regex不是匹配文件名,而是匹配完整的文件名(包括路径)
- 正则表达式具有更强的模式匹配功能
#### 1-匹配文件名和路径全程包含linux(前)test(后)的文件
find . -type f -regex ".*linux.*test.*" -print
#### 2-匹配全部为数字的md文件
find . -regex ".*/[0-9]*.md" -print
8 进阶技巧2-find的执行选项exec
-exec COMMAND:查找后使用额外命令处理查找结果
#### {}表示查找到的结果,-exec指定额外处理命令,\为转义字符,额外命令到\;结束
find /var -type p -exec tar -cvf test.tar {} \;
#### 查找当前目录下的文件,并对查找结果执行ls -l 命令
find . -type f -exec ls -l {} \;
#### 查找当前目录下,24小时内更改过的文件,并进行删除操作(慎用!!!,删除没有提示)
find . -type f -mtime -1 -exec rm {} \;
#### 查找当前目录下文件名以.log结尾且24小时内更改过的文件,并进行安全删除操作(即删除前会进行询
find -name "*.log" -type f -mtime -1 -ok rm {} \;
#### 查找当前目录下的以.log结尾的文件或目录,并移动到test目录下
find -name "*.log" -exec mv {} test \;