Find

find 返回值:find 手冊頁錯了嗎?

  • April 26, 2016

find手冊頁說:

-execdir command {} +總是返回 true,while -execdir command {} ; 僅當 command 返回 0 時才返回 true。

EXIT STATUS 如果所有文件都成功處理,則查找狀態為 0 的退出,如果發生錯誤,則大於 0。

但是,如果我對此進行測試,則會得到相反的行為:

$ find . -execdir false '{}' \; ; echo $?      
0

$ find . -execdir false '{}' \+ ; echo $?      
1

有人可以解釋一下嗎?

-exec而不是我得到-execdir相同的結果。我試過find (GNU findutils) 4.6.04.4.2

此“返回”不是 的退出程式碼,而是用於將多個操作連結在一起find的操作的返回值。如果你試試:-execdir``find

find . -execdir false '{}' \; -print

然後-print永遠不會執行(即沒有輸出),而兩者:

find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print

列印每條路徑。


但是,當使用設置+的退出程式碼時find *:*如果命令的任何呼叫退出非零,則它是非零的,而對於;退出程式碼(直接)不受命令結果的影響。POSIX 需要這種行為-exec,我想表明否則無法檢測到的故障:

如果主表達式由 a 標出,則主表達式<plus-sign>應始終評估為真,並且評估主表達式的路徑名應聚合到集合中。

$$ … $$ 如果任何呼叫返回非零值作為退出狀態,則查找實用程序應返回非零退出狀態

-exec ... \;未指定為影響退出程式碼,因此find除非出現錯誤,否則退出零的預設行為適用。-exec ... \;退出非零的命令不被視為錯誤,因此在沒有其他錯誤的情況下,退出程式碼將始終為零。

引用自:https://unix.stackexchange.com/questions/279123