一:知识背景
1.这两个命令就是用来匹配出你在整个文件系统中需要的目录或者文件
2.多数shell会采用find和xargs清理过期的日志,这个最合适不过了
二:命令详解
语法:
find filepath -option 【-print -exec -ok】
filepath就是搜索的文件指定目录,大家若不知道可以直接/ 在根目录执行,只不过时间较长
-option:
选项很多我就选择几个实用的: name 名称匹配 mtime 时间匹配 type文件类型匹配 当然几个选项可以通过管道符并行使用达到多次匹配的作用
print 将find的结果标准输出,很多人并不喜欢这样使用
-exec和- ok的作用一致,对匹配的文件执行该参数所给出的linux命令。相应命令的形式为 'command' {} ;,注意{ }和;之间的空格。
选项详解:
-iname:find /usr/local -name [a-z][A-Z][0-9]*.txt -print
这就是对于 /usr/local文件下 首字符为小写字母,第二个为大写字符、第三个为数字、*为匹配所有的txt文件进行匹配,一个例子足以
- mtime : -mtime后面的+n 匹配文件更改时间距今 n天以前的文件 ; -n匹配文件更改时间距今 n日以内的文件
find /usr/local/ -mtime +5 -print 匹配该目录下修改时间距命令执行时间5天以前的文件
-depth:一般没有加就是从父目录开始匹配 ,添加规则就是从子目录开始匹配
[root@localhost /]# mkdir -p test/test1/test2/test3
[root@localhost test]# find /test/ -depth
/test/test1/test2/test3/test4
/test/test1/test2/test3
/test/test1/test2
/test/test1
/test/
-type 文件类型
d dictory 目录
f file 普通文件
l 符号链接文件
s socket 接口文件 (区别于 -s 为判断文件存在且至少有一个字符)
-exec -ok来执行shell命令
-exec:
[root@localhost test]# find . -iname test1 -exec ls -al {} ;
total 12
drwxr-xr-x. 3 root root 4096 Dec 22 07:43 .
drwxr-xr-x. 3 root root 4096 Dec 22 07:46 ..
drwxr-xr-x. 3 root root 4096 Dec 22 07:43 test2
大家要注意 {} 之间有空格,后面添加;表示命令行结束
-ok:
[root@localhost test4]# find /test -iname test123 -ok rm {} ;
< rm ... /test/test1/test2/test3/test4/test123 > ? y
-ok 也是后面添加shell指令但是会有安全提醒,输入y删除,n否定
xargs 就是今天的精华了
xargs和exec作用相同,f i n d命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样在 find命令运行
几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是x a rg s命令的用处所在,特别是与 f i n d命令一起使用。find命令把匹配的文件传递给 x a rg s命令,而x a rg s命令每次只获取一部分文件而不是全部,不像 - e x e c选项那样。
[root@localhost mysql-test]# find /test/ -iname test2| xargs echo''>/root/mysql-5.6.40/mysql-test/README
[root@localhost mysql-test]# vim /root/mysql-5.6.40/mysql-test/README
大体上 exec和xargs就足够大家用了!!!!!