关于 ‘--exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别
find goal.log.*.gz -mtime +2 -exec rm -rf {} \;
find goal.log.*.gz -mtime +3|xargs rm -f
前言:
find 命令一直都是系统管理员的常用命令之一, 其参数中 “-exec” 尤其实用。而 “xargs” 命令,针对查询也有属于自己的见解。本文着重讲解的是围绕 find 命令查询为主线,使用 -exec 参数(find 命令) 或使用 xargs 命令。
将当前 “标准输出” (数据流) 作为另一个命令的 “标准输入” 。简单来说,将 find 查询出的命令做更多处理。
一、预备教程, “find” 命令。
# null 参数
find . 或 find ~
这是最基本的使用find的方法。 具体功能是列出 /root 目录下的所有文件,这里仅仅是举例(未必定是 /root 目录),注:这条命令也可以配合 “|grep” 进行更多操作,如下比如我想查询关于zabbix的信息(“ * ”为通配符表所有)
# name 参数
find -name tom 或 find -iname tom
注:这里我并没有打目录位置。原因是" find 中 并不是必须的。
**如果你需要查找的位置就在当前path(目录),那么系统默认就是" find . " **
另:参数 -name 与 -iname 俩者有相异部分(表格如下)
name | same | different |
---|---|---|
name 参数 | 匹配用户输入 | 100%完全匹配用户输入 |
iname 参数 | 匹配用户输入 | 忽略大小写区别,相较结果更多 |
# type 参数
find /root -name rabbit -type f
类型参数列表 | 表示字母 |
---|---|
普通文件 | f |
符号连接 | l |
普通目录 | d |
字符设备 | c |
块设备 | b |
套接字 | s |
# size 参数
find /root -type f -size 10M
注:关于 “ -size 10M ” 在大小单位上是允许 “+” “-” 操作的。即 “+10M” 大于10M, “-10M” 小于10M 。
大小字母 | 文字表示 |
---|---|
b | 块(512字节) |
c | 字节 |
w | 字(2字节) |
k | 千字节 |
M | 兆字节 |
G | 吉字节 |
find的参数还有很多已经和本文后面内容无关,这里列出三个。文章继续...
比如:-perm可以选择权限,-user可是选择用户,-group可以选择用户组等 。
二、重点参数,“find” 命令
-exec command:command 为其他指令,-exec后面可再接额外的指令来处理搜寻到的结果。
{ }代表的是「由 find 找到的内容」,如上图所示,找到的结果会被放置到 { } 位置中;
-exec一直到 ; 是关键字,代表找到额外动作的开始(-exec)到结束(\),在这中间的就是找到指令内的额外动作
因为「;」在bash的环境下是有特殊意义的,因此利用反斜线来跳脱。
以上,来自鸟哥[http://linux.vbird.org/linux_basic/0220filemanager.php]的相关介绍。
# 显示
find /root/.ssh -exec ls -l {} ;
删除
find /root -size 10M -exec rm -rf {} ;
# 重命名
find /root -name tom -exec mv {} tom_rename ;
# 移动
find /root -name tom_rename -exec mv {} /tmp ;
三、预备知识,”xargs”命令
xargs可以将标准输出(数据流)转换成命令参数作为标准输入( 进行横排输出)。
更多查看:https://zh.wikipedia.org/wiki/Xargs
1、简单 echo
注意: xargs 命令的 echo 指令可忽略(默认)。
2、定义界定符
在 “xargs” 中是有 “界定符” 的,类似 find 中 { } ,代表的是「由 xargs 找到的内容」。xargs 不需要 “;” 做结束符。
另:关于定义界定符(-I),有一点很多文章都没有强调。
使用 xargs 命令时并不是一定要使用 “{}” 方括号的,可能是因为 find 命令的( -exec )默认是 “{}” (为了统一)使用其他的定义符都是可以的(甚至你都可以用英文,数学等作为定义界定符)
3、“xargs” is command not parameter(参数)
xargs 是一条命令,您可以通过 help 或者 man 查询到关于 xargs 的详细信息。
这条性质赋予了 xargs 更多的可能性,而不仅仅受限于 find 命令。
四、重点使用,”xargs”命令
# 显示
find /root -name Tom | xargs -I {} ls -ld {}
# 删除
find /root -name Tom | xargs rm -rf
# 重命名
find /root -name RABBIT | xargs -I - mv - RABBIT_NEW
# 移动
find /root -name RABBIT_NEW | xargs -I 8 mv 8 /tmp
五、后记
最后再说说关于 xargs,基础的功能就是这篇文章所写所说,但是熟练使用,会发现各种奇葩的运用方法。
比如说,你在(渗透测试)文本文档中有很多URL地址需要下载。那么运用xargs,可以使用这样下载:
cat url.txt | xargs wget -c
再比如说,你在卸载RPM的PHP包时,需要卸载所有包。那么运用xargs,可以使用这样卸载:
rpm -qa |grep php | xargs rpm -e
此处因当前无应用需要卸除,使用 yum 重装代替