PHP exec xargs 不执行,xargs和exec详解

xargs:

xargs擅长将标准输入数据转换成命令行参数,xargs能处理stdin并将其转换为特定的命令行参数,也可以将单行或者多行的文本输入转换成其他格式。

xargs的作用就是将管道符前面输入的内容作为xargs后面命令的输入,它的好处是可以将多步才能完成的任务合并成一步。(常与find搭配使用)

命令格式:command |xargs command

例:

find  /var/log -mtime +10 |xargs rm-f

实际应用:

1.将多行输入转换成单行输出:[root@one ~]# cat 11111.txt

a b c d

e f g

h i

g

[root@one ~]# cat 11111.txt |xargs

a b c d e f g h i g

2.单行输入转换成多行输入:xargs -n

默认输出以空格为定界符。-n指定每行输入的最多参数。[root@one ~]# cat 222.txt

q w e r t

a s d f g

z x c v b

[root@one ~]# cat 222.txt|xargs -n 2

q w

e r

t a

s d

f g

z x

c v

b

3.指定定界符:xargs  -d[root@one ~]# echo "appleAappleAappleA"|xargs -d A

apple apple apple

4.读取输入信息,将格式化参数传递给命令。

例:将脚本需要的参数写入test.txt文件中下,通过xargs传递给脚本test.sh。cat test.txt |xargs -n 1 ./test.sh

5.结合find使用xargs

find与xargs搭配使用,可以让工作变得更加轻松。

例:find . -type f -name "*.txt" -print0 |xargs rm -f

很多文件中都可能包含有空格符(‘’),所以find命令输出的结果的定界符不确实是(’/n’)还是空格,所以搭配xargs删除某指定类型文件时候,应该使用print0与find搭配,以字符“\0”为分隔符。[root@one ~]# find . -type f -name "*.txt" -print

./test.txt

./shell/1212.txt

./1.txt

./222.txt

[root@one ~]# find . -type f -name "*.txt" -print0

./test.txt./shell/1212.txt./1.txt./222.txt

6.批量修改文件后缀名:

[root@one 111]# touch 1.txt 2.txt 3.txt

[root@one 111]# ls

1.txt  1.txt.gz  2.txt  3.txt

[root@one 111]# rm -f 1.txt.gz

[root@one 111]# ls

1.txt  2.txt  3.txt

[root@one 111]# ls *.txt|xargs -n 1 -i{} mv {} {}_bak

[root@one 111]# ls

1.txt_bak  2.txt_bak  3.txt_bak

xargs -n1 -i{}类似于for循环,-n 1每一行输出一个对象,-i{}用意是吧前面的对象用{}来代替。

mv {} {}_bak相当于mv 1.txt 1.txt_bak

exec:

与xargs相似的命令exec。

find和-exec搭配一样的很强大。

例:

查找当前木创建时间大于10天的文件并删除:

find . -mtime +10 -exec rm -rf {} \;

//此命令是把{}作为前面find查找出来的文件的代替符,后面的\是;的脱意符,不然shell会把分号作为是该行命令的结尾,就只能把find找出的第一个文件删除,其他文件依然存在。

把某用户的全部文件所有权限更改成另一个用户。

find . -type f -user root -exec chown user1 {} \;

-exec如何结合多个命令:

exec的缺陷是只能接受单个命令,想直接执行多个命令怎么办呢?

我们可以把多个命令写在一个脚本当中去,然后让-exec去执行这个脚本。

-exec ./commands.sh {} \;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用和[2]的内容,可以得出以下结论: - execxargs是用于在Linux系统中执行命令的工具。 - exec命令可以用于执行shell内部的函数,而xargs命令可以将输入数据转换为命令行参数。 - 如果想让execxargs执行自定义的函数,需要先使用export -f命令导出函数。 - 使用xargs命令时,可以通过-n选项指定每次执行的参数个数。 根据你的问题,你想知道如何正确组合xargs、bash -c和环境变量。根据引用的示例代码,你可以先将需要执行的命令通过管道传递给xargs命令,然后使用bash -c来执行自定义的函数。 例如,假设你有一个命令$command,它的输出需要通过grep、awk和xargs进行处理,并且你想执行自定义的函数process来对每个参数进行处理。你可以按照以下步骤组合这些命令: 1. 首先,使用$command命令的输出作为输入,通过管道传递给grep命令,使用-F选项指定精确匹配的模式,比如"Specific :: Criterion"。 2. 然后,再次通过管道将grep命令的输出传递给awk命令,使用'{print $6}'来输出第6列的内容。 3. 最后,使用xargs命令将awk命令的输出作为参数传递给bash -c命令,使用-I选项指定参数的占位符为%。在bash -c命令中,可以调用之前导出的自定义函数process来处理每个参数。 这样,每次xargs命令将一部分参数传递给bash -c命令,并使用process函数对每个参数进行处理。 综上所述,你可以正确组合xargs、bash -c和环境变量来执行自定义的函数。请根据自己的需求调整命令和函数的具体内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值