PHP exec xargs 不执行,关于 ‘--exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别(新版)...

###前言:

find 命令一直都是系统管理员的常用命令之一, 其参数中 “-exec” 尤其实用。而 “xargs” 命令,针对查询也有属于自己的见解。本文着重讲解的是围绕 find 命令查询为主线,使用 -exec 参数(find 命令) 或使用 xargs 命令。

c21fe1587db754060870933eca707700.png

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

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

# null 参数

find   .  或 find  ~

d06ccf169aec360c49ecdcb95f27bd65.png

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

22cdb50106d4ea1a686dabb41fc0d35e.png

# name 参数

find -name tom 或 find -iname tom

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

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

9fdec67c2e2d77b0eca2888f4a15dfcb.png

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

name

same

different

name 参数

匹配用户输入

100%完全匹配用户输入

iname 参数

匹配用户输入

忽略大小写区别,相较结果更多

# type 参数

find /root -name rabbit -type f

804fabf00e195098c907fe00c1038f1e.png

类型参数列表

表示字母

普通文件

f

符号连接

l

普通目录

d

字符设备

c

块设备

b

套接字

s

# size 参数

find /root -type f -size 10M

注:关于 “ -size 10M ” 在大小单位上是允许 “+” “-” 操作的。即 “+10M” 大于10M, “-10M” 小于10M 。

3402f9a81e194030a5a7372f7204d179.png

大小字母

文字表示

b

块(512字节)

c

字节

w

字(2字节)

k

千字节

M

兆字节

G

吉字节

find的参数还有很多已经和本文后面内容无关,这里列出三个。文章继续...

比如:-perm可以选择权限,-user可是选择用户,-group可以选择用户组等 。

二、重点参数,“find” 命令

-exec command:command 为其他指令,-exec后面可再接额外的指令来处理搜寻到的结果。

f1d1879da38e88fb99fa1200f9ae50e3.png

{ }代表的是「由 find 找到的内容」,如上图所示,找到的结果会被放置到 { } 位置中; -exec一直到 ; 是关键字,代表找到额外动作的开始(-exec)到结束(\),在这中间的就是找到指令内的额外动作

因为「;」在bash的环境下是有特殊意义的,因此利用反斜线来跳脱。

# 显示

find /root/.ssh -exec ls -l {} ;

e1533e50afca4082ca32ff42d9eb5425.png

删除

find /root -size 10M -exec rm -rf {} ;

77bb7cdd81afbc6de8265782cb7c24d2.png

# 重命名

find /root -name tom -exec mv {} tom_rename ;

f0d20acb7f17c7a1213af80776964efe.png

# 移动

find /root -name tom_rename -exec mv {} /tmp ;

9cbe21319465491d0cf16f0f0e848717.png

##三、预备知识,”xargs”命令

xargs可以将标准输出(数据流)转换成命令参数作为标准输入( 进行横排输出)。

1、简单 echo

22fd9380ec1c2bbdaa73eb57fdf8eec5.png

注意: 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 {}

b9cb251d20598f405a511c479c08ca3c.png

# 删除

find /root -name Tom | xargs rm -rf

27ef0fb39c6d09a754f995dd142d2773.png

# 重命名

find /root -name RABBIT | xargs -I - mv - RABBIT_NEW

1ae5548a26c8567eaa694bc99f26c5d9.png

# 移动

find /root -name RABBIT_NEW | xargs -I 8 mv 8 /tmp

66a2b4fd632c0368a6b20f130b578f46.png

五、后记

最后再说说关于 xargs,基础的功能就是这篇文章所写所说,但是熟练使用,会发现各种奇葩的运用方法。

比如说,你在(渗透测试)文本文档中有很多URL地址需要下载。那么运用xargs,可以使用这样下载:

cat url.txt | xargs wget -c

19d02fecf1e3dd8b9204fb086649308c.png

e1aad705db08a747dbbf8be476e3e15f.png

再比如说,你在卸载RPM的PHP包时,需要卸载所有包。那么运用xargs,可以使用这样卸载:

rpm -qa |grep php | xargs rpm -e

此处因当前无应用需要卸除,使用 yum 重装代替

5c3b9f93f96241d5b4442848506ddfc0.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux下,find命令可以用来查找文件和目录。在find命令的基础上,可以使用xargs和-exec来进一步处理查找到的结果。 xargs命令可以将find命令查找到的结果作为参数传递给其他命令。例如,可以使用以下命令将查找到的所有文件删除: ``` find /path/to/dir -type f -name "*.txt" | xargs rm ``` 这个命令会查找/path/to/dir目录下所有扩展名为.txt的文件,并将它们作为参数传递给rm命令,从而删除这些文件。 -exec命令可以在find命令查找到的每个文件上执行指定的命令。例如,可以使用以下命令将查找到的所有文件复制到另一个目录: ``` find /path/to/dir -type f -name "*.txt" -exec cp {} /path/to/another/dir \; ``` 这个命令会查找/path/to/dir目录下所有扩展名为.txt的文件,并将它们复制到/path/to/another/dir目录中。 总的来说,xargs和-exec命令可以帮助我们更方便地处理find命令查找到的结果。需要注意的是,使用这些命令时要注意参数的正确性和安全性。 ### 回答2: 在Linux系统中,find命令可以查找指定目录下的文件和文件夹,其语法如下所示: ```shell find path -options [expressions] ``` 其中,path表示要查找的目录路径,-options则是一系列选项,用于指定查找的规则,expressions则是查找表达式。 在find命令中,使用-xargs和-exec选项可以在查找出符合条件的文件后执行相应操作。这两个选项的主要区别在于,-exec选项将查找到的文件作为参数传递给执行命令,而-xargs选项则将它们作为标准输入流传递给命令。 举个例子,假设我们要查找当前目录下所有的.txt文件,并将它们全部重命名为_new.txt。我们可以使用以下命令: ```shell find . -name "*.txt" -exec mv {} {}_new.txt \; ``` 其中,-name选项用于指定查找的文件名模式,-exec选项则用于执行重命名操作,{}表示查找到的文件名,由于在命令行中{}是一个特殊的字符,因此需要使用\进行转义,最后一个分号表示命令的结束。 如果使用-xargs选项,我们需要将命令改为: ```shell find . -name "*.txt" | xargs -I {} mv {} {}_new.txt ``` 其中,|表示将find命令的输出作为xargs命令的输入,-I选项用于指定替换字符串(这里为{}),mv命令则将每个文件重命名为_new.txt。 需要注意的是,在使用-xargs选项时,对于包含空格等特殊字符的文件名,需要使用-0选项将它们用空字符分隔,如下所示: ```shell find . -name "*.txt" -print0 | xargs -0 -I {} mv {} {}_new.txt ``` 总的来说,使用-exec选项简单直观,而-xargs选项则更灵活,可以将查找到的文件批量传递给命令进行处理。因此,在实际运用中,我们可以根据具体情况选择合适的选项。 ### 回答3: 在Linux系统中,有两个常见的命令用于在文件系统中查找文件:find和xargs。这两个命令可以用来找到符合特定条件的文件,但是它们的功能略有不同。 find命令是一个非常强大的工具,它可以用来查找任意目录下符合指定条件的文件或目录。find命令的语法为: find [path] [expression] 其中path表示要查找的目录或文件,而expression是由各种测试和动作组成的语句。 xargs命令则是用来接收一个命令的输出作为输入,并将其传递给另一个命令xargs命令的常见用法是将find命令的输出作为xargs的输入,并将输出交给另一个命令来处理。 在使用find命令xargs命令时,有两种常见的用法。第一种是使用find命令和-exec选项来执行一个命令,第二种是使用find命令xargs命令来与其他工具一起使用。 使用find命令和-exec选项来执行命令 在使用find命令时,最常见的选项是-exec。该选项允许您执行一个命令,以处理每个find找到的文件。下面是一个示例: find /home -name "*.txt" -exec cat {} \; 此命令将在/home目录下查找所有扩展名为.txt的文件,并将它们的内容输出到终端。 使用find命令xargs命令与其他工具一起使用 find命令的输出可以用作xargs命令的输入。在这种情况下,xargs命令将用每个换行符分隔的输出作为参数,并将其传递给指定的命令。以下示例演示了这种用途: find /home -name "*.txt" | xargs grep "keyword" 此命令将在/home目录下查找所有扩展名为.txt的文件,并将它们的内容传递给grep命令以查找关键字。 总之,find命令xargs命令都是Linux系统中常用的工具,可以用于查找文件和将一组文件传递给其他命令进行处理。使用它们可以简化许多常见的任务,并增强您在Linux系统中的生产力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值