linux命令执行的结果如何快速传递给下一个管道?xargs完虐

xargs

  • xargs是给命令传递参数的过滤器,他的作用就是将上一步的输出传递到下一命令的输入上。类似于shell脚本中$? 。
  • 这样使用的好处是什么呢?你想想每次想关闭一个进程,你是否需要先查找,然后拿着结果再去执行第二条命令,如果你将第一条命令结果传递到第二条指定位置就好了,这部args 就是这个作用
  • xargs可以将单行或多行转换成单行格式内容。但是经过xargs处理的文本换行符和空白都会被空格替换

案例

  • 目前在/home/zxhtom目录下我想查看/home/zxhtom/zxh目录下的所有文件信息,我可以ls -l /home/zxhtom/zxh

  • 假如现在我们不知道zxh具体位置,如果是以前的我肯定要马骂爹了 。 不知道位置在哪还想看内容,就好比你不想花钱还想娶媳妇。好在linux并没有这么绝情,就算你不知道还是支持你大海捞针式的爱情。接下来我们看看如何实现:

  • 我们可以先通过find查找然后通过管道符和xargs将结果传递给ls -l

  • 等同于ls -l /home/zxhtom/zxh /home/zxhtom/project/git/shell/org/zxh

命令格式

  • cmd | xargs -item cmdtwo
命令 功能
-a file 读取文件内容作为输入参数
-E flag argument参数截止符 ; 有的系统时-e , 经过测试M1的mac和ubuntu 18 都是- E
-p 每次执行命令参数的时候会进行用户确认提醒
-i 或 - I 使用上一命令的内容-i 直接替换{}. -I 需要指定替换符
-n num xargs传递的参数个数。默认是将上一结果所有参数传递给下一命令
-t 先打印命令,在执行命令
-r (no-run-if-empty)当检测到xargs的输入为空即不执行。比如xargs kill -9. 。如果没有参数会杀掉所有端口。这种情况很危险
-s num 允许xargs传递的最大参数个数; -n是指定传递个数
-L num 一次性将num行输入传递过去
-d delim分隔符的意思。xargs默认的是回车符;而在命令argument的分割符是空格。我们就可以通过-d指定修改
-x 退出
- P 修改最大的进程数,默认是1,为0时候为as many as it can

-E

  • 到搜索到-e指定参数名时就结束传递出去。-e的参数也不会传递过去 。 e == end 意思 ,在输出内容中按照空格分割,如果匹配到-e 字符,结果输出就会结束了。
shell 复制代码
echo a b c | xargs -E c echo
  • 结果只会输出 a b

-i || -I

  • xargs直接将命令传递给命令,但是有的时候我们的命令并不是在最后。或者说我们命令参数有些是固定,只有个别参数需要替换,那么我们就需要-I 来处理了。-i==-I {}
  • 我现在想要实现一个复制的功能。假如我们服务器上有个日志的功能按照时间生成文件名。且目前服务器上仅会存在一个这样的文件。程序员想要删除日志里不需要的内容,但是又不能直接操作源文件又不知道具体位置被运维放到了哪里,那么这个时候我们就可以使用xargs 的占位功能了。
shell 复制代码
sudo find / -name uuid | xargs -i cp {} /home/zxhtom/temp
  • 通过上述命令就完成了对uuid这个日志文件的查找并且复制到/home/zxhtom/temp位置上了。
相关推荐
吃饺子不吃馅几秒前
【开源】create-web-app:多引擎可插拔的前端脚手架
前端·javascript·架构
贝塔实验室2 分钟前
Altium Designer 6.0 初学教程-如何生成一个集成库并且实现对库的管理
linux·服务器·前端·fpga开发·硬件架构·基带工程·pcb工艺
iOS开发上架哦7 分钟前
Charles 抓不到包怎么办?从 HTTPS 分析到 TCP 抓包的全流程排查指南
后端
阿巴~阿巴~17 分钟前
TCP服务器实现全流程解析(简易回声服务端):从套接字创建到请求处理
linux·服务器·网络·c++·tcp·socket网络编程
bcbnb24 分钟前
App Store 软件上架需要多久?从构建到审核通过的全流程时长解析与影响因素分析
后端
赖small强26 分钟前
【Linux C/C++开发】第20章:进程间通信理论
linux·c语言·c++·进程间通信
赖small强27 分钟前
【Linux C/C++开发】第24章:现代C++特性(C++17/20)核心概念
linux·c语言·c++·c++17/20
用户03048059126342 分钟前
前后端数据传输: 利用 Jackson 注解实现 Enum 与 int 的双向映射
java·后端
间彧1 小时前
从 Docker Compose 到 Docker Swarm:RocketMQ 微服务项目集群部署实战指南
后端
mudtools1 小时前
使用.NET 8+ 与飞书API构建组织架构同步服务
架构·.net·飞书