linux命令中xargs,linux xargs命令详解及应用

引子:find . -name "*.csv" | xargs du -ck | grep total

使用find -exec选项处理匹配到的文件时,find命令将匹配到的所有文件一起传递给exec执行

有些系统exec的命令长度有限制,运行会导致溢出错误“参数列太长”或“参数列溢出”

exec会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行,一些情况下会导致进程过多,系统性能下降的问题,因而效率不高

xargs命令每次只获取一部分文件而不是全部,处理完先获取的 然后再去继续获取(究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。)

xargs只有一个进程,保证系统性能

使用实例:

1.查找系统中的每一个普通文件,然后使用xargs命令来测试他们分别属于哪类文件

find . -type f -print | xargs file

2.在整个系统中查找内存信息存储文件(core dump),然后把结果保存到/tmp/core.log文件中

find / -name "core" -print | xargs echo "" > /tmp/core.log

3.在当前目录下查找所有用户具有读、写和执行权限的文件。并收回相应的写权限

find . -perm -7 -print | xargs chmod o-w

4.用grep命令在所有的普通文件中搜索hostname这个词

find . -type f -print | xargs grep "hostname"

5.用grep命令在当前目录下的所有普通文件中搜索hostnames这个词

find . -name * -type f -print | xargs grep "hostnames"

(注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。)

6.使用xargs执行mv

find . -name "*.log" | xargs -i mv {} test4

7.find后执行xargs提示xargs:argument line too long解决方法:

find . -type f -atime +0 -printf0 | xargs -0 -11 -t rm -f

find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

rm -f

-l1是一次处理一个;-t是处理之前打印出命令

8.使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替代替字符,如例子中的[]

find . -name "file" | xargs -I [] cp [] ..

9.xargs的-p参数的使用

find . -name "*.log" | xargs -p -i mv {} ..

-p参数会提示让你确认是否执行后面的命令,y执行,n不执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值