因爲業務側使用時,一些腳本文件寫的不夠嚴謹,形成/var/spool/postfix/maildrop/目錄常常被用戶通知郵件文件堆滿。而經過rm -rf * 刪除時,會提示-bash: /bin/rm: Argument list too long 。經過ls |xargs rm -rf 進行刪除時也耗時較長,這裏能夠經過rsync進行刪除。bash
針對上面的問題,咱們能夠經過如下方法清空該目錄:函數
先建立一個空目錄 mkdir /tmp/empty/ 清空目標目錄 # rsync --delete-before -avH --progress --stats /tmp/empty/ /var/spool/postfix/maildrop
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
選項說明:工具
-delete-before 接收者在傳輸以前進行刪除操做 –progress 在傳輸時顯示傳輸過程 -a 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性 -H 保持硬鏈接的文件 -v 詳細輸出模式 –stats 給出某些文件的傳輸狀態
不過在使用上面的命令進行清理時,存在一個問題,清空後,目標目錄的權限會和源目錄的權限同樣。如:/tmp/empty是root:root,而maildrop以前是postfix:postdrop ,執行以後也會maildrop目錄的權限也會變成root:root 。因爲-a權限是-rlptogD幾個參數的集合,因此能夠將og(owner:group)兩個參數去掉。清空時自動保持以前的目錄權限,以下:post
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
爲何rsync這麼快呢?spa
rm刪除內容時,將目錄的每個條目逐個刪除(unlink),須要循環重複操做不少次;rsync刪除內容時,創建好新的空目錄,替換掉老目錄,基本沒開銷。想要深層次的區分兩個命令在調用系統函數時的區別,可使用SystemTap工具進行分析(因爲本人也不懂該工具的使用,因此這裏就不獻醜了)。code