Rm

rmdir 的 -f 選項

  • June 23, 2020

精簡版:

我正在尋找一種方法來獲取使用時-f標誌的行為。rm``rmdir

長版:

我正在執行一個並行程序,其中每個命令都必須在完成後清理其工作目錄。命令可以在同一個工作目錄中執行,因此rmdir -p --ignore-fail-on-non-empty可以完美地防止工作人員刪除另一個工作人員仍在使用的目錄。當同一目錄中的最後兩個工作人員同時完成時,唯一的問題似乎出現了——然後其中一名工作人員被擊敗並rmdir返回錯誤“沒有這樣的文件或目錄”。

有沒有辦法像rmdir忽略這個非問題rm一樣-f

rm確實有-d可能是一個不同的解決方案的選項,但我看不到任何方法來獲得-p --ignore-fail-on-non-empty類型行為rm。無論如何,-d並不是所有版本都通用,rm所以最好避免這種方法。)

您可以先檢查目錄是否存在:

[ -d "$tmpdir" ] && rmdir -p --ignore-fail-on-non-empty "$tmpdir" 

如果兩個作業同時開始刪除目錄,這仍然會產生錯誤(TOCTOU 漏洞:測試和查看目錄,然後都嘗試刪除它),但這可能不太可能。

或者您可以忽略rmdir可能產生的每個錯誤:

rmdir -p --ignore-fail-on-non-empty "$tmpdir" 2>/dev/null || true

或者,創建您自己的程序來刪除目錄,但只忽略“文件不存在”錯誤。例如使用 Perl:

perl -le 'if (not rmdir($ARGV[0]) and not $!{ENOENT}) { 
      warn "rmdir: $!\n"; exit 1; }' "$tmpdir"

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