Man page - xargs(1)
Packages contains this manual
Available languages:
en fr pl ja ro zh_TW zh_CNManual
XARGS
名 称概 述
描 述
选 项
示 例
退 出 状 态
遵 循 标 准
历 史
缺 陷
报 告 缺 陷
版 权
参 见
跋
名 称
xargs - 从 标 准 输 入 构 建 并 执 行 命 令 行
概 述
xargs [ 选 项 ] [ 命 令 [ 初 始 参 数 ]]
描 述
本 手 册 页 记 载 了 GNU 版 本 的 xargs 。 xargs 从 标 准 输 入 读 取 由 空 白 字 符 或 换 行 符 分 隔 的 条 目 ( 如 需 在 条 目 中 保 留 空 格 , 可 以 使 用 单 引 号 、 双 引 号 或 者 反 斜 线 转 义 ) , 并 且 使 用 给 出 的 初 始 参 数 以 及 后 续 从 标 准 输 入 读 取 的 条 目 作 为 参 数 来 执 行 给 定 的 命 令 ( 默 认 执 行 echo ) 一 次 或 多 次 。 标 准 输 入 中 的 空 行 将 被 忽 略 。
程 序 持 续 构 建 给 定 命 令 的 命 令 行 直 到 遇 到 了 系 统 定 义 的 限 制 为 止 ( 除 非 使 用 了 -n 和 -L 选 项 ) 。 指 定 的 命 令 会 被 调 用 多 次 , 直 到 用 尽 输 入 条 目 列 表 项 为 止 。 通 常 情 况 下 , 调 用 命 令 的 次 数 要 远 少 于 输 入 条 目 项 的 数 量 。 这 通 常 可 以 带 来 十 分 显 著 的 性 能 提 升 。 某 些 命 令 也 可 并 行 执 行 ; 请 参 见 -P 选 项 。
因 Unix 文 件 名 可 包 含 空 白 和 换 行 符 , 这 样 的 默 认 行 为 通 常 会 出 现 问 题 ; 含 有 空 白 和 /或 换 行 符 的 文 件 名 无 法 被 xargs 正 确 处 理 。 在 这 些 场 景 下 , 最 好 应 使 用 -0 选 项 来 避 免 这 样 的 问 题 。 使 用 该 选 项 时 , 您 应 确 保 生 成 xargs 的 输 入 的 程 序 同 样 使 用 空 字 符 作 为 分 隔 符 。 例 如 如 果 使 用 了 GNU find , 则 应 当 选 用 其 -print0 选 项 。
如 果 任 何 对 命 令 的 调 用 返 回 了 255 状 态 码 , xargs 会 立 刻 停 止 而 不 再 读 取 更 多 的 输 入 数 据 。 该 情 况 发 生 时 程 序 会 在 标 准 错 误 打 印 错 误 信 息 。
选 项
-0, --null
输 入 条 目 以 空 字 符 结 束 , 而 不 是 以 空 白 结 束 , 引 号 和 反 斜 杠 也 不 特 殊 ( 每 个 字 符 都 按 字 面 意 思 理 解 ) 。 禁 用 文 件 结 束 字 符 串 ( EOF) , 该 字 符 串 与 其 他 参 数 按 相 同 方 法 处 理 。 当 输 入 项 可 能 包 含 空 白 、 引 号 或 反 斜 线 时 , 该 选 项 非 常 有 用 。 GNU find -print0 选 项 产 生 的 输 入 适 合 这 种 模 式 。
-a 文 件 , --arg-file= 文 件
从 给 定 file 而 不 是 标 准 输 入 读 取 条 目 。 如 果 使 用 该 选 项 , 运 行 命 令 时 标 准 输 入 将 保 持 不 变 。 否 则 , 标 准 输 入 将 从 /dev/null 重 定 向 。
--delimiter= 分 隔 符 , -d 分 隔 符
输 入 条 目 由 指 定 字 符 分 隔 而 结 束 。 所 指 定 的 分 隔 符 可 能 是 单 个 字 符 、 类 似 \n 的 C 风 格 字 符 转 义 序 列 、 或 者 八 进 制 /十 六 进 制 转 义 代 码 。 八 进 制 和 十 六 进 制 转 义 代 码 和 printf 命 令 所 使 用 的 格 式 一 致 。 不 支 持 多 字 节 字 符 。 处 理 输 入 时 , 引 号 和 反 斜 线 并 不 会 被 特 殊 处 理 ; 输 入 中 的 每 个 字 符 都 被 按 照 其 字 面 样 式 进 行 处 理 。 使 用 -d 选 项 会 禁 用 所 有 文 件 结 束 字 符 串 , 令 其 与 其 它 参 数 按 照 相 同 方 式 处 理 。 在 输 入 仅 包 含 用 换 行 符 分 隔 的 条 目 时 可 以 使 用 该 选 项 ; 但 如 果 可 能 的 话 , 设 计 让 程 序 使 用 --null 选 项 几 乎 总 是 更 好 的 方 案 。
-E eof-str
将 文 件 结 束 字 符 串 设 置 为 eof-str 。 如 果 该 文 件 结 束 字 符 串 作 为 一 行 输 入 出 现 , 则 其 后 的 输 入 内 容 均 会 被 忽 略 。 如 果 既 未 使 用 -E 也 未 使 用 -e , 则 不 使 用 任 何 文 件 结 束 字 符 串 。
-e [ eof-str ], --eof [ =eof-str ]
该 选 项 是 -E 选 项 的 同 义 词 。 请 使 用 -E , 因 为 它 符 合 POSIX 标 准 , 而 该 选 项 不 符 合 POSIX 标 准 。 如 果 省 略 eof-str , 则 没 有 文 件 结 束 字 符 串 。 如 果 既 没 有 使 用 -E 也 没 有 使 用 -e , 则 不 会 使 用 文 件 结 尾 字 符 串 。
-I 替 换 占 位 字 符 串
将 给 定 初 始 参 数 中 出 现 的 替 换 占 位 字 符 串 替 换 为 从 标 准 输 入 中 读 取 得 到 的 字 符 串 。 另 外 , 未 被 引 号 包 括 的 空 白 字 符 不 会 被 视 为 输 入 项 目 的 分 隔 符 ; 此 时 分 隔 符 是 换 行 符 。 该 选 项 隐 含 启 用 了 -x 和 -L 1 选 项 。
-i [ 替 换 占 位 字 符 串 ], --replace [ =替 换 占 位 字 符 串 ]
如 果 给 出 了 替 换 占 位 字 符 串 , 则 该 选 项 和 -I 替 换 占 位 字 符 串 同 义 。 如 果 缺 失 了 替 换 占 位 字 符 串 , 则 其 效 果 等 同 于 -I {}。 -i 已 被 弃 用 , 请 改 用 -I 。
-L 最 大 行 数
每 个 命 令 行 使 用 至 多 最 大 行 数 个 非 空 输 入 行 。 行 末 尾 的 空 白 字 符 会 使 得 下 一 行 成 为 上 一 行 逻 辑 上 的 延 续 。 隐 含 启 用 -x 。
-l [ 最 大 行 数 ], --max-lines [= 最 大 行 数 ]
和 -L 选 项 同 义 。 但 与 -L 不 同 , 此 时 最 大 行 数 的 参 数 是 可 选 的 。 如 果 未 指 定 最 大 行 数 , 则 默 认 取 值 为 1。 -l 选 项 已 被 弃 用 , 因 为 POSIX 标 准 指 定 了 使 用 -L 选 项 。
-n max-args , --max-args = max-args
每 条 命 令 行 最 多 使 用 max-args 个 参 数 。 如 果 参 数 总 大 小 超 过 限 制 ( 参 见 -s 选 项 ) , 则 实 际 使 用 的 参 数 数 量 可 能 少 于 max-args , 除 非 指 定 了 -x 选 项 ; 在 这 种 情 况 下 , xargs 将 直 接 退 出 。
-P max-procs , --max-procs = max-procs
同 时 最 多 运 行 max-procs 个 进 程 ; 默 认 值 为 1。 如 果 max-procs 为 0, 则 xargs 会 尽 可 能 多 地 同 时 运 行 进 程 。 应 当 配 合 -n 选 项 或 -L 选 项 与 -P 一 起 使 用 ; 否 则 很 可 能 只 执 行 一 次 exec。 在 xargs 运 行 期 间 , 你 可 以 向 其 进 程 发 送 SIGUSR1 信 号 来 增 加 并 行 运 行 的 命 令 数 , 或 发 送 SIGUSR2 信 号 来 减 少 该 数 量 。 增 加 数 量 时 不 能 超 过 实 现 定 义 的 上 限 ( 可 通 过 --show-limits 查 看 ) , 减 少 数 量 时 不 能 低 于 1。 xargs 永 远 不 会 主 动 终 止 其 启 动 的 命 令 ; 当 请 求 减 少 并 发 数 时 , 它 只 会 在 已 有 的 多 个 命 令 终 止 之 后 才 启 动 新 的 。 xargs 在 退 出 前 总 是 会 等 待 所 有 子 进 程 结 束 ( 但 有 例 外 , 请 参 见 本 文 档 “缺 陷 ”一 节 ) 。
如 果 未 使 用 -P 选 项 , xargs 将 不 会 处 理 SIGUSR1 和 SIGUSR2 信 号 , 这 意 味 着 这 些 信 号 将 会 终 止 该 程 序 ( 除 非 在 启 动 xargs 之 前 , 这 些 信 号 已 在 父 进 程 中 被 屏 蔽 ) 。
请 注 意 , 被 调 用 的 进 程 需 自 行 负 责 正 确 管 理 对 共 享 资 源 的 并 发 访 问 。 例 如 , 如 果 多 个 进 程 同 时 尝 试 向 标 准 输 出 打 印 内 容 , 除 非 它 们 以 某 种 方 式 进 行 协 作 防 止 冲 突 , 否 则 输 出 的 顺 序 将 无 法 确 定 ( 并 且 很 可 能 会 混 杂 在 一 起 ) 。 采 用 某 种 锁 机 制 是 一 种 防 止 此 类 问 题 的 方 法 。 一 般 而 言 , 使 用 锁 机 制 有 助 于 确 保 输 出 正 确 , 但 会 降 低 性 能 。 如 果 你 不 希 望 承 受 性 能 差 异 的 影 响 , 可 以 让 每 个 进 程 输 出 到 不 同 的 文 件 , 或 者 以 其 他 方 式 使 用 不 同 的 资 源 。
-o, --open-tty
在 执 行 命 令 之 前 , 在 子 进 程 中 将 标 准 输 入 重 新 打 开 为 /dev/tty 。 如 果 你 希 望 xargs 运 行 一 个 交 互 式 应 用 程 序 , 这 将 非 常 有 用 。
-p, --interactive
在 执 行 每 条 命 令 行 之 前 提 示 用 户 确 认 , 并 从 终 端 读 取 一 行 输 入 。 仅 当 用 户 的 响 应 以 “y”或 “Y”开 头 时 才 执 行 该 命 令 行 。 此 选 项 隐 含 启 用 -t 。
--process-slot-var = name
将 环 境 变 量 name 设 置 为 每 个 正 在 运 行 的 子 进 程 中 的 唯 一 值 。 一 旦 子 进 程 退 出 , 该 值 会 被 重 新 使 用 。 例 如 , 这 可 以 用 于 实 现 一 个 基 本 的 负 载 分 配 方 案 。
-r, --no-run-if-empty
如 果 标 准 输 入 中 不 包 含 任 何 非 空 白 字 符 , 则 不 执 行 命 令 。 通 常 情 况 下 , 即 使 没 有 输 入 , 命 令 也 会 执 行 一 次 。 此 选 项 是 GNU 扩 展 功 能 。
-s max-chars , --max-chars =max-chars
每 条 命 令 行 最 多 使 用 max-chars 个 字 符 , 包 括 命 令 本 身 、 初 始 参 数 以 及 每 个 参 数 字 符 串 末 尾 的 空 字 符 。 最 大 允 许 值 依 赖 于 系 统 , 其 计 算 方 式 为 : exec 的 参 数 长 度 限 制 , 减 去 环 境 变 量 所 占 空 间 , 再 减 去 2048 字 节 的 保 留 空 间 。 如 果 计 算 出 的 值 超 过 128 KiB, 则 默 认 值 为 128 KiB; 否 则 , 默 认 值 为 该 最 大 值 。 其 中 1 KiB 等 于 1024 字 节 。 xargs 会 自 动 适 应 更 严 格 的 限 制 。
--show-limits
显 示 操 作 系 统 施 加 的 命 令 行 长 度 限 制 、 xargs 所 选 择 的 缓 冲 区 大 小 , 以 及 -s 选 项 所 设 定 的 限 制 。 如 果 你 不 希 望 xargs 实 际 执 行 任 何 操 作 , 可 以 将 输 入 通 过 管 道 重 定 向 为 来 自 /dev/null ( 并 可 考 虑 加 上 --no-run-if-empty 选 项 ) 。
-t, --verbose
在 执 行 命 令 之 前 , 将 该 命 令 行 打 印 到 标 准 错 误 输 出 上 。
-x, --exit
如 果 大 小 超 出 限 制 ( 参 见 -s 选 项 ) , 则 退 出 程 序 。
|
-- |
用 于 标 记 选 项 列 表 的 结 束 。 其 后 的 参 数 ( 如 果 有 ) 即 使 以 - 开 头 , 也 会 被 当 作 操 作 数 处 理 。 例 如 , xargs -- --help 会 运 行 PATH 中 名 为 --help 的 命 令 , 而 不 是 打 印 用 法 说 明 ; xargs -- --mycommand 会 执 行 命 令 --mycommand , 而 不 会 将 其 视 为 无 法 识 别 的 选 项 而 报 错 。 |
||
|
--help |
打 印 xargs 的 选 项 摘 要 并 退 出 。 |
--version
打 印 xargs 的 版 本 号 并 退 出 。
选 项 --max-lines ( -L 、 -l ) 、 --replace ( -I 、 -i ) 以 及 --max-args ( -n ) 是 互 斥 的 。 如 果 同 时 指 定 了 其 中 多 个 选 项 , xargs 通 常 会 采 用 命 令 行 中 最 后 指 定 的 选 项 , 也 就 是 说 , 之 前 指 定 的 冲 突 选 项 会 被 重 置 为 默 认 值 。 此 外 , xargs 会 在 stderr 上 发 出 警 告 信 息 。 此 规 则 有 一 个 例 外 : 当 使 用 --replace 或 其 别 名 -I 、 -i 后 , 若 再 次 指 定 特 殊 值 1 ( 即 ’ -n 1 ’) , 该 值 将 被 忽 略 , 因 为 它 实 际 上 并 不 构 成 冲 突 。
示 例
find /tmp -name core -type f -print | xargs /bin/rm -f
在 /tmp 目 录 中 或 其 子 目 录 下 查 找 名 为 core 的 文 件 并 将 其 删 除 。 请 注 意 , 如 果 有 任 何 文 件 名 中 包 含 换 行 符 或 空 格 , 该 操 作 可 能 无 法 正 确 执 行 。
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
在 /tmp 目 录 中 或 其 子 目 录 下 查 找 名 为 core 的 文 件 并 将 其 删 除 , 处 理 文 件 名 时 会 正 确 处 理 包 含 空 格 或 换 行 符 的 文 件 或 目 录 名 称 。
find /tmp -depth -name core -type f -delete
在 /tmp 目 录 中 或 其 子 目 录 下 查 找 名 为 core 的 文 件 并 将 其 删 除 , 且 比 前 一 个 示 例 更 高 效 ( 因 为 我 们 避 免 了 使 用 fork (2) 和 exec (2) 来 启 动 rm , 也 不 需 要 额 外 的 xargs 进 程 ) 。
cut -d: -f1 < /etc/passwd | sort | xargs echo
生 成 系 统 上 所 有 用 户 的 简 洁 列 表 。
退 出 状 态
xargs 退 出 时 会 使 用 下 列 状 态 码 :
|
0 |
表 示 运 行 成 功 |
|||
|
123 |
表 示 所 调 用 的 命 令 中 出 现 了 退 出 状 态 码 在 1–125 范 围 内 的 情 况 |
|||
|
124 |
表 示 命 令 以 255 退 出 |
|||
|
125 |
表 示 命 令 被 信 号 杀 死 |
|||
|
126 |
表 示 无 法 运 行 命 令 |
|||
|
127 |
表 示 命 令 未 找 到 |
|||
|
1 |
表 示 出 现 了 其 他 错 误 。 |
大 于 128 的 退 出 状 态 码 通 常 由 shell 所 使 用 , 指 示 程 序 由 于 某 个 致 命 信 号 而 停 止 。
遵 循 标 准
截 至 GNU xargs 第 4.2.9 版 , xargs 的 默 认 行 为 是 不 适 用 逻 辑 上 的 文 件 结 束 标 记 。 POSIX (IEEE Std 1003.1, 2004 版 ) 允 许 该 行 为 。
-l 和 -i 选 项 在 POSIX 标 准 的 1997 版 出 现 , 但 在 2004 版 中 未 出 现 。 因 此 最 好 应 使 用 -L 和 -I 进 行 替 代 。
-o 选 项 是 POSIX 标 准 中 为 了 加 强 与 BSD 的 兼 容 性 而 出 现 的 扩 展 。
POSIX 标 准 允 许 具 体 实 现 设 置 exec 函 数 的 参 数 大 小 限 制 。 包 含 环 境 在 内 , 其 限 制 最 小 可 以 低 至 4096 字 节 。 如 需 编 写 可 移 植 脚 本 , 脚 本 不 能 假 定 更 大 的 限 制 值 。 然 而 , 笔 者 至 今 未 曾 见 到 最 大 值 限 制 如 此 低 的 实 现 版 本 。 可 以 使 用 --show-limits 选 项 检 查 当 前 系 统 上 生 效 的 实 际 限 制 值 。
在 xargs 4.9.0 版 和 之 前 版 本 中 , 即 便 未 使 用 -P 选 项 , SIGUSR1 和 SIGUSR2 也 不 会 导 致 xargs 终 止 运 行 。
历 史
xargs 程 序 由 贝 尔 实 验 室 的 Herb Gellis 所 发 明 。 请 参 见 findutils 的 texinfo 手 册 中 Finding Files 一 节 以 了 解 更 多 信 息 。
缺 陷
无 法 保 证 xargs 能 够 完 全 安 全 地 运 行 , 因 为 在 产 生 输 入 文 件 的 列 表 和 其 被 xargs 执 行 的 命 令 所 处 理 这 两 个 事 件 之 间 总 有 时 间 差 。 如 果 有 其 他 用 户 同 时 在 访 问 系 统 , 他 们 可 以 在 这 个 时 间 窗 口 内 操 作 文 件 系 统 并 迫 使 xargs 要 运 行 的 命 令 本 来 要 处 理 的 文 件 和 实 际 处 理 的 文 件 不 相 同 。 如 需 了 解 对 这 个 问 题 和 相 关 问 题 更 详 细 的 讨 论 , 请 参 考 findutils Texinfo 文 档 中 的 “Security Considerations”章 节 。 find 工 具 的 -execdir 选 项 通 常 可 以 被 用 来 提 供 更 为 安 全 的 功 能 替 代 。
在 使 用 -I 选 项 时 , 从 输 入 读 取 的 每 一 行 都 会 存 储 在 内 部 缓 冲 区 。 这 意 味 着 使 用 -I 选 项 时 xargs 能 接 受 的 输 入 行 数 存 在 上 限 。 如 需 绕 过 这 个 限 制 , 可 以 使 用 -s 选 项 来 加 大 xargs 所 使 用 的 缓 冲 区 大 小 , 且 另 外 也 可 以 使 用 多 次 额 外 的 xargs 调 用 来 确 保 不 会 出 现 超 长 的 行 。 例 如 :
某 些 命 令 | xargs -s 50000 echo | xargs -I ’{}’ -s 100000 rm ’{}’
在 这 里 , 第 一 次 调 用 的 xargs 因 为 未 使 用 -i 选 项 而 没 有 输 入 行 长 度 限 制 。 第 二 次 调 用 的 xargs 确 实 存 在 限 制 , 但 我 们 已 确 保 了 它 永 远 不 会 遇 到 超 出 其 处 理 能 力 范 围 的 行 。 这 并 不 是 最 理 想 的 解 决 方 法 。 理 想 情 况 下 , -i 选 项 不 应 该 预 设 行 长 度 限 制 , 这 也 是 本 段 讨 论 会 出 现 在 “缺 陷 ”一 节 中 的 原 因 。 这 个 问 题 在 处 理 find (1) 的 输 出 时 并 不 会 出 现 , 因 其 每 行 只 会 输 出 一 个 文 件 名 。
在 xargs 4.9.0 版 本 及 之 前 的 版 本 中 , xargs -P 在 其 子 进 程 仍 在 运 行 , 但 其 中 某 些 已 经 返 回 255 的 情 况 下 会 退 出 。
报 告 缺 陷
GNU findutils
在 线 帮 助 :
<https://www.gnu.org/software/findutils/#get-help>
请 向
<https://translationproject.org/team/zh_CN.html>
报 告 翻 译 错 误
。
请 使 用 GNU Savannah 缺 陷 追 踪 系 统 上 的 表 格 报 告 任 何 出 现 的 问 题 :
<https://savannah.gnu.org/bugs/?group=findutils>
有 关 GNU findutils 软 件 包 的 通 用 主 题 可 以 在 bug-findutils 邮 件 列 表 上 讨 论 :
<https://lists.gnu.org/mailman/listinfo/bug-findutils>
版 权
版
权 所 有 © 1990–2024 自
由 软 件 基 金 会
。 许 可 证 GPLv3+: GNU GPL
第 3 版 或 更 新 版
本 <https://gnu.org/licenses/gpl.html>。
这 是 自 由 软 件
: 您 可 以 自 由
地 更 改 并 对 其
重 新 发 布 。 在
法 律 所 允 许 的
范 围 内 不 含 任
何 担 保 。
参 见
find (1), kill (1), locate (1), updatedb (1), fork (2), execvp (3), locatedb (5), signal (7)
完
整 文 档
<https://www.gnu.org/software/findutils/xargs>
或 者 在 本 地 使
用 :
info xargs
跋
本
页 面 中 文 版 由
中 文 man 手 册 页 计
划 提 供 。
中 文 man 手 册 页 计
划 :
https://github.com/man-pages-zh/manpages-zh