• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Linux之find-xargs

linux 搞代码 3年前 (2022-03-03) 20次浏览 已收录 0个评论

exec的问题

参数太长

在应用 find命令的-exec选项解决匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对可能传递给exec的命令长度有限度,这样在find命令运行几分钟之后,就会呈现溢出谬误argument line too long。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用途所在,特地是与find命令一起应用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全副,不像-exec选项那样。这样它能够先解决最先获取的一部分文件,而后是下一批,并如此继续下去。

过程过多

在有些零碎中,应用-exec选项会为解决每一个匹配到的文件而发动一个相应的过程,并非将匹配到的文件全副作为参数一次执行;这样在有些状况下就会呈现过程过多,零碎性能降落的问题,因此效率不高; 而应用xargs命令则只有一个过程。另外,在应用xargs命令时,到底是一次获取所有的参数,还是分批获得参数,以及每一次获取参数的数目都会依据该命令的选项及零碎内核中相应的可调参数来确定。

查问当前目录下所有权限是777的文件

> find . -perm 777 | xargs ls -al

查问当前目录下所有的.txt文件,并输入到指定文件a.log(没有换行)

> find . -name *.txt | xargs echo > /tmp/a.log

xargs只是简略地把\n变成空格,那么可能存在一些问题。比方文件名带空格,这时候xargs就有问题了。

应用-n指定单行输入的个数

  • -n num 前面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。

查问当前目录下所有的.txt文件,并输入到指定文件b.log(有换行)

> find . -name *.txt | xargs -n 1 echo > /tmp/b.log 

-n 1 每行只输入一个

查问当前目录下查找所有用户具备读、写和执行权限的文件,并发出相应的写权限

> find . -perm 777 | xargs chmod o-w

查找当前目录下所有的.txt文件,并找出蕴含rumenz字符串的文件

> find . -name *.txt | xargs grep -n "rumenz"

查找当前目录下所有的.txt文件,并挪动到指定的目录

> find . -name *.txt | xargs -i cp -rf {} /tmp; 

加-i 参数间接用 {}就能代替管道之前的规范输入的内容

应用-i参数默认的后面输入用{}代替,-I参数能够自定义后面的输入符号

自定义后面输入的占位符是[]

> find . -name *.txt | xargs -I [] cp -rf [] /tmp

-p参数提醒是否执行

> find . -name *.log | xargs -p -i mv {} /tmp

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

批量下载文件

url.txt都是须要下载的链接地址

> cat url.txt | xargs wget -c

总结:什么时候用-i

如果命令前面能够跟内容,且没有目标门路的时候,能够省略-i,否则得加上。

原文链接:https://rumenz.com/rumenbiji/…
微信公众号:入门小站

linux常用命令速查手册PDF下载

3669页vim参考手册PDF下载

阿里云ECS运维Linux系统诊断PDF下载

Docker速查手册PDF下载

Linux学习笔记【强悍总结值得一看】PDF下载

shell扼要教程PDF下载


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux之find-xargs

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址