廣泛支援使用“-exec … +”查找?

廣泛支援使用“-exec … +”查找?

判斷從GNU findutils 更改日誌它必須在 GNU 中存在至少十年(也比它作為 POSIX 的一部分的時間還要長),所以現在可以安全地假設它在所有地方都受到支持嗎?

另外,在可以使用的xargs情況下,是否有任何充分的理由來提倡替代? (顯然,如果您需要一些特殊參數,例如用於控制最大參數數、並行性等的參數,-exec … +您會使用這些參數)xargs

有趣的引用來自GNU findutil 文件的一部分:

[查找與-exec … +]可能比 的某些用途效率低xargs;例如,xargs允許在上一個命令仍在執行的同時建置新的命令列,並允許您指定多個要並行運行的命令。然而,該find ... -exec ... +結構具有廣泛的可移植性的優點。 GNU findutils-exec ... +直到版本 4.2.12 才支援 ' '[2005 年 1 月];原因之一是-print0無論如何它已經有了“ ”動作。

答案1

+的變體在-execPOSIX 中引入如下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清單。bashsedawk

(實際上,這要求檔案和目錄名稱中不嵌入換行符。Bash 和 GNU find、sed、awk 和 xargs 都支援 nul 字元\0作為分隔符,因此它們可以操作所有可能的檔案名,而無需問題。)

相關內容