当前位置: 首页 > news >正文

⚡ Linux xargs 命令参数详解

📖 1. xargs 简介

xargs 是 Linux/Unix 下的一个非常常用的命令工具,作用是 将标准输入(stdin)的数据转换为命令的参数,从而实现批量执行命令的功能。


🚀 2. xargs 用法

🔹 2.1 基础用法

[前置命令] | xargs [选项参数] [后置命令]

此时 xargs 会将 前置命令的标准输出 作为输入,从中读取数据,然后拼接到后置命令中并执行。

⚠️ 注意:如果前置命令没有输出到标准输出(例如使用 -fprintf 将结果直接写入文件),则 xargs 将无法获取输入,后置命令也就不会被执行。

📂 2.2 配置文件用法

xargs -a [配置文件] [选项参数] [后置命令]

此时 xargs 会直接从 指定文件 中读取内容作为输入,然后拼接到后置命令中并执行。

⌨️ 2.3 用户交互用法

xargs [后置命令]

如果 xargs 前面没有任何输入,它会直接从 终端标准输入 中读取数据。输入一行内容并按下回车,该行就会作为参数传递给后置命令。当用户按下 Ctrl+D(表示 EOF,文件结束符)时,xargs 才会退出。


⚙️ 3. xargs 参数

🔸 3.1 输入控制型参数

  • -0:输入项以 \0 分隔,常与 find -print0 搭配使用

解释:这里利用find将当前目录下的 .txt 文件都找出来,传给 xargs ,再让 xargs 传给 tar 打包

  • -E eofstr:指定 EOF 标记,遇到该标记时停止读取,通常用来避免处理文件末尾的多余内容,效果:

解释:这里用 STOP 作为 eofstr 分隔符,当 xargs 读取到 STOP 以后就不读取后面的内容,所以 echo 只打印到 STOP 前一行。说实话,我觉得这个参数真的没什么屌用,而且容易出现各种匪夷所思的奇怪现象,似乎 STOP 必须单独成行才能够识别,前后有东西都会识别不成功,知道这是为什么的可以评论区留言。

  • -a file:从指定文件读取输入,而不是从 stdin 或管道。效果:

解释:这里将 1.txt 作为 file ,将 1.txt 的内容作为参数传递给 echo 打印到终端 

  • -d delim:自定义分隔符(如 , : ? 等),一般配合 -a file 和配置文件使用,

解释:这里利用 : 作为 delim 分割符将文件的内容分割成多个参数传递给 printf 打印到终端。这里不用 echo 打印是因为 echo 会默认把多个参数用空格连起来,这样看上去就像把 : 替换成空格一样,容易使人感到困惑。

⚠️注意:分割符最好加上引号,防止一些特殊字符被shell提前解析导致命令出错


🧩 3.2 命令结构控制型参数

  • -I {}:指定占位符。每次读取一行输入,替换命令中出现的占位符位置,效果:

解释:这里利用 -I {} 参数,将当前目录下(包括子目录下)所有的 .txt 后缀的文件名都写入了 5.txt 这个文件中。一般一条 xargs 命令中 {} 会出现两次,第一次在 -I 后面,第二次在后置命令中的任意位置。

⚠️注意:-I {} 参数默认和执行控制型参数中的 -n 和 -L 冲突,同时使用 xargs 会报错。不过 -n 和 -L 一般使用频率较低,所以遇到冲突的情况也较少,可以忽略。


⚡ 3.3 执行控制型参数

  • -n args:每次最多使用多少个参数,效果:

解释:这里将 2 作为 args ,加了 -n 2 后 echo 一次性只处理2个参数了

  • -L lines:每次最多读取多少行,效果:

解释:这里将 2 作为 lines ,加了 -L 2 参数以后,echo 一次性只处理两行内容了

  • -s chars:设置单条命令的最大长度,在碰到超长文件名或路径的时候,用于修改单条命令最大长度上限,以确保命令能正常执行。一般情况下用不到,这里就不演示了。

  • -x:若参数过长无法执行,则立即退出,同样也是避免超长命令行错误的,这里就不演示了。

  • -P procs:并行执行的子进程数,通常配合 -n-L 使用,效果:

解释:这里将 2 作为 procs,让 xargs 一次性开两个子进程跑后置命令。-P 参数主要用于提升效率,进程越多跑的越快嘛,和 make -j 参数一样的道理。不过需要多进程跑的一般都是非常复杂的任务了,大多数情况下不用 -P 参数也不见得会有多慢。

  • -o:执行命令后,将标准输入重定向回 /dev/tty(终端),保证命令可以继续交互;常用于 vimless 等交互式程序,效果:

解释:这里可以看到,如果不添加 -o  参数用 xargs 打开 vim 会出现 Warning, 同时退出 vim 后终端会出现异常,详见 4. 注意事项

  • -p:每次执行命令前询问用户是否确认,效果:

解释:加了 -p 参数在执行命令前就需要用户输入 y 再按回车来确认,直接按回车是不会确认的。

  • -r:若输入为空,则不执行命令(默认行为是执行一次空命令),效果:

解释:这里在当前目录下找不到 123.txt,所以一次命令都不执行

  • -t:执行前打印完整命令,通常用于调试,效果:

解释:这还用解释吗?


⚠️ 4. 注意事项

⚡ 4.1 xargs 打开交互式程序出现 stdin 冲突

利用 xargs 打开交互式程序进行操作,操作完退出后终端出现异常:

异常主要表现为看不到输入的内容,同时显示结果的时候出现错位现象。这是因为 xargs 和 vim 的 stdin 冲突导致的,要恢复终端可以在终端盲打输入 reset 后按回车。要避免这个问题需要在 xargs 打开 vim 时添加 -o 参数 。


📚 5. 参考资料

  • GNU xargs 官方手册 (man7.org)

http://www.dtcms.com/a/360912.html

相关文章:

  • 【数据可视化-103】蜜雪冰城门店分布大揭秘:2025年8月数据分析及可视化
  • Ubuntu 25.10 Snapshot4 发布。
  • 小迪Web自用笔记23
  • Linux 定时任务 crontab 完全指南 —— 让服务器自动干活,解放双手
  • 【XR技术概念科普】详解6DoF:为什么它是沉浸感的关键?
  • 【开题答辩全过程】以 健身爱好者饮食管理小程序为例,包含答辩的问题和答案
  • 餐饮门店的小程序怎么做?如何开发餐饮店下单小程序?
  • Rinetd解决服务器IP端口的转发
  • Adobe Illustrator 2025最新破解教程下载安装教程,Illustrator2025最新版下载
  • Adobe Photoshop 2025 最新下载安装教程,附PS2025下载
  • 自由学习记录(91)
  • 从零开始的python学习——函数(1)
  • stdexcept介绍与使用指南
  • 13 选 list 还是 vector?C++ STL list 扩容 / 迭代器失效问题 + 模拟实现,对比后再做选择
  • 基于 HTML、CSS 和 JavaScript 的智能图像边缘检测系统
  • 【数据分享】上市公司-信息透明度综合指数数据(2003-2023)
  • Neurokit———开源多模态电生理数据处理Python包
  • ubantu安装配置hive
  • Java内功修炼(3)——并发的四重境界:单例之固、生产消费之衡、定时之准、池化之效
  • 响应式编程框架Reactor【9】
  • 《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings
  • 【HTML】draggable 属性:解锁网页交互新维度
  • SpringAI模型评估
  • python爬虫之requests库的使用(小白五分钟从入门到精通)
  • Selenium 自动化测试实战:绕过登录直接获取 Cookie
  • 如何用AI视频增强清晰度软件解决画质模糊问题
  • 血缘元数据采集开放标准:OpenLineage Guides 使用 Apache Airflow® 和 OpenLineage + Marquez 入门
  • IPC 进程间通信 interprocess communicate
  • 【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法
  • 应用平台更新:可定制目录、基于Git的密钥管理与K8s项目自动化管理