我有一個很大find的應該洗掉它找到的任何檔案/目錄。我只是無法讓它正常作業。
如果我附加-exec rm -fr {} \;,在某些時候,我總是收到以下錯誤:
find: ‘/path/to/dir/file123.local’: No such file or directory
如果我將其替換為 ,則會-delete出現以下錯誤:
find: cannot delete `/path/to/dir': Directory not empty
我在網上尋找建議,但建議總是另一種選擇(替換-exec為-delete,反之亦然)
有沒有人碰巧知道在不將 stderr 重定向到 null 的情況下修復它的方法?
先謝謝了!
uj5u.com熱心網友回復:
find不知道你的命令傳遞給-exec做什么。它按以下順序遍歷目錄樹:
- 找到一個檔案
- 對該檔案執行命令
- 如果是目錄,向下遍歷
現在如果用 洗掉目錄rm -fr,就沒有什么可以向下遍歷了,所以find報告它。
如果您提供該-depth選項,則遍歷順序將更改:
- 找到一個檔案
- 如果是目錄,向下遍歷
- 對該檔案執行命令
這將消除錯誤訊息。
-delete暗示-depth,所以表面上它應該作業。但是,您有責任確保要洗掉的目錄已完全清除。如果你用-timeetc過濾掉一些檔案,你最終可能會試圖洗掉一個不完全干凈的目錄。
uj5u.com熱心網友回復:
您可以嘗試{}用雙引號括起來,目錄路徑中可能有空格。
-exec rm -rf "{}" \;
uj5u.com熱心網友回復:
如果我很好地閱讀了你的問題,你想洗掉檔案,但有時它們已經被其他行程洗掉了,你想知道你應該做什么。
為什么你認為你應該做任何事情?您希望檔案消失,顯然它已經消失了,所以不用擔心。
顯然相應的錯誤訊息可能很煩人,但是您可以2>/dev/null在命令末尾處理添加(將錯誤輸出重定向到<NULL>)。
所以你得到:
find ... -exec rm -fr {} \; 2>/dev/null
來自user1934428 的評論后編輯:
我可能是放棄r開關的好主意:
find ... -exec rm -f {} \; 2>/dev/null
在這種情況下,您應該不再有錯誤:
find ... -exec rm -f {} \;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/335122.html
上一篇:用新格式替換現有日期
