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