判斷從GNU findutils 更改日誌它必須在 GNU 中存在至少十年(也比它作為 POSIX 的一部分的時間還要長),所以現在可以安全地假設它在所有地方都受到支持嗎?
另外,在可以使用的xargs
情況下,是否有任何充分的理由來提倡替代? (顯然,如果您需要一些特殊參數,例如用於控制最大參數數、並行性等的參數,-exec … +
您會使用這些參數)xargs
有趣的引用來自GNU findutil 文件的一部分:
[查找與
-exec … +
]可能比 的某些用途效率低xargs
;例如,xargs
允許在上一個命令仍在執行的同時建置新的命令列,並允許您指定多個要並行運行的命令。然而,該find ... -exec ... +
結構具有廣泛的可移植性的優點。 GNU findutils-exec ... +
直到版本 4.2.12 才支援 ' '[2005 年 1 月];原因之一是-print0
無論如何它已經有了“ ”動作。
答案1
+
的變體在-exec
POSIX 中引入如下PASC 解釋 1003.2 #2102001 年,並在第 6 期中與 POSIX 標準合併(如當前標準所述)find(1)
文件)。根據解釋,System V Release 4 的所有衍生版本都支援它,HP-UX 也是如此(2001 年 - 我知道 HP-UX 10 不支援它);顯然任何符合 POSIX 6 或 7 標準的系統也支援它。
GNU-ism 其實是find -print0 | xargs -0
一組指令。如果-exec ... +
可用,但不-0
提供支持xargs
,那麼您最好使用前者;即使如果它支持您的需要,也-0
沒有理由不使用。-exec ... +
答案2
-exec ...
現在可以安全地假定[ ] 在所有地方都受到支持嗎?
該-exec ... '{}' ';'
變體為每個執行的命令提供精確的匹配,現在肯定會在所有地方得到支持,甚至在非 POSIX unix 系統上也是如此。
變-exec ... '{}' +
體,我不確定。確實,它的定義是POSIX-1,所以目前所有 POSIXy 系統肯定都支援它。但是,我不確定是否所有較舊的 UNIX 系統(仍在使用)都支援它。
-exec ... '{}' +
在可以使用[ ] 的情況下,是否有任何充分的理由提倡使用 xargs ?
不,不是真的。既然一個指令就夠了,為什麼還要使用兩個指令呢?
問題更在於,如果你唯一知道的工具是錘子,那麼所有問題看起來都像釘子。的強大之處在於,在執行作用於清單的命令之前,您可以使用 、 、 等操作來匹配xargs
清單。bash
sed
awk
(實際上,這要求檔案和目錄名稱中不嵌入換行符。Bash 和 GNU find、sed、awk 和 xargs 都支援 nul 字元\0
作為分隔符,因此它們可以操作所有可能的檔案名,而無需問題。)