关于 ‘--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 命令。

img

将当前 “标准输出” (数据流) 作为另一个命令的 “标准输入” 。简单来说,将 find 查询出的命令做更多处理。

一、预备教程, “find” 命令。

# null 参数

find   .  或 find  ~

这是最基本的使用find的方法。 具体功能是列出 /root 目录下的所有文件,这里仅仅是举例(未必定是 /root 目录),注:这条命令也可以配合 “|grep” 进行更多操作,如下比如我想查询关于zabbix的信息(“ * ”为通配符表所有)

# name 参数

find -name tom 或 find -iname tom

注:这里我并没有打目录位置。原因是" find 中 并不是必须的。

**如果你需要查找的位置就在当前path(目录),那么系统默认就是" find . " **

另:参数 -name 与 -iname 俩者有相异部分(表格如下)

namesamedifferent
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 相關的額外動作

{ }代表的是「由 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 重装代替

另外关于 find 命令:我们跳出 find 还有更多的选择,CentOS下的mlocate就很棒 **

(完)
 
 
 
posted @ 2024-02-26 11:46  CarterLee  阅读(118)  评论(0编辑  收藏  举报