Bash

查找和 rm 命令不遞歸刪除

  • January 18, 2017

我們有一個假設刪除舊文件夾的簡單腳本。問題是它不會遞歸地刪除它們。

這是命令:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

它會刪除文件和文件夾,但突然嘗試從已刪除的目錄中刪除文件。

伺服器正在執行CentOS,並且使用NFS從儲存中掛載文件夾。

我們能做些什麼?

發生這種情況是因為rm從命令接收到所有找到的文件和目錄的列表find。列表中的目錄位於它們前面並遞歸刪除文件。

我可以提供兩種解決方案:

  1. 對遞歸 find結果進行排序:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. 使用-delete選項而不是外部rm工具。find $PWD -maxdepth 5 -mtime +80 -delete

UPD.1 sugests @Dimitar您可以添加-type d然後 find 將僅對目錄進行操作。它可能更快,但在這種情況下,您不會清理$PWD目錄中的舊文件。

find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}

UPD.2正如@ezra-s所建議的那樣,您可以在沒有以下情況下做到這一點xargs

find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;

我認為這確實是最好的方法。

引用自:https://serverfault.com/questions/827008