Files

使用 for 循環刪除目錄中的所有內容

  • March 15, 2018

我正在嘗試使用從我的伺服器中刪除大量郵件(主要是郵件傳遞失敗)

rm -rf /home/*/mail/new/*

我得到-bash: /usr/bin/rm: Argument list too long

我嘗試使用查找

find /home/*/mail/new/ -mindepth 1 -delete

但 20 分鐘後,它似乎什麼也沒做。

如何使用 for 循環刪除其中的所有內容(目錄、文件、點文件)/home/*/mail/new/

像這樣的東西

for f in /home/*/mail/new/*.*~; do
       # if it is a file, delete it
   if [  -f $f ]
   then
       rm "$f"
   fi
done

請幫我重寫此命令以刪除文件和文件夾以及其中的所有內容/home/*/mail/new/

編輯:我的問題是獨一無二的,因為它是關於在 FOR 循環中這樣做的。

問題是/home/*/mail/new/*擴展到太多文件名。最簡單的解決方案是刪除目錄:

rm -rf /home/*/mail/new/

或者,使用您的find命令。它應該工作,它只會更慢。

或者,如果您需要new目錄使用循環來查找它們,刪除並重新創建它們:

for d in /home/*/mail/new/; do
   rm -rf "$d" && mkdir "$d"
done

您嘗試編寫的循環(但不要使用它,它非常緩慢且效率低下)類似於:

for f in /home/*/mail/new/* /home/*/mail/new/.*; do
   rm -rf "$f"
done

如果要刪除所有內容,則無需測試文件,只需使用rm -rf和目錄和文件都可以通過同一命令刪除。它會抱怨不能刪除...但你可以忽略它。或者,如果您想要超級乾淨並避免錯誤,您可以在 bash 中執行此操作:

shopt -s dotglob
for f in /home/*/mail/new/*; do
       rm -rf "$f"
done

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