Find

什麼都沒找到時使查找失敗

  • March 8, 2022

find被呼叫以查找任何內容時,它仍然以程式碼 0 退出。有沒有辦法讓它在找不到文件時返回一個指示失敗的退出程式碼?

如果您grep支持讀取 NUL 分隔的行(例如帶有 GNUgrep的GNU -z),您可以使用它來測試是否有任何輸出find

find /some/path -print0 | grep -qz .

要將數據通過管道傳輸到另一個命令,您可以刪除該-q選項,讓grep數據保持不變,同時在沒有任何結果時仍然報告錯誤:

find /some/path -print0 | grep -z . | ...

具體來說,${PIPESTATUS[1]}在 bash 中應該保持grep.

如果您find不支持-print0,請使用 grep without-z並希望文件名中的換行符不會導致問題:

find ... | grep '^' | ...

在這種情況下,使用^代替.可能更安全。如果輸出有連續的換行符,^將通過它們,但.不會。

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