Bash

遞歸刪除具有詳細輸出的空文件夾

  • October 23, 2020

這應該相當簡單,但我不確定我錯過了什麼。

我想遞歸地刪除空目錄,並獲得被刪除內容的輸出,這個命令肯定有效,但我無法詳細列印 -excec 的操作。

while [ -n "$(find . -depth -type d -empty -exec rm -v -rf {} +)" ]; do :; done

遞歸我的意思是,我想繼續刪除空文件夾,直到沒有其他空文件夾。

$ tree .
.
├── empty
│   └── empty
│       └── empty
└── non-emty
   └── ko

此項目只會刪除樹中的一個空文件夾

$ find . -depth -type d -empty -exec rmdir -v {} +
rmdir: removing directory, `./empty/empty'

您不需要 while 循環,您應該使用 rmdir -p 刪除空的父母

find . -depth -type d -empty -exec rmdir -v -p {} + 
rmdir: removing directory, `./1/3'
rmdir: removing directory, `./1'
rmdir: removing directory, `.'
rmdir: failed to remove directory `.': Invalid argument
rmdir: removing directory, `./2/3'
rmdir: removing directory, `./2'
rmdir: failed to remove directory `./2': Directory not empty

您看不到命令​​輸出的原因是您在子shell中執行它,$(...)但對返回的輸出不做任何事情,您可以在 subsell 之前放置一個 echo 以列印出它返回的內容

echo $(find . -depth -type d -empty -exec rmdir -v -p {} +)
rmdir: removing directory, `./1/3' rmdir: removing directory, `./1' rmdir: removing directory, `.' rmdir: removing directory, `./2/3' rmdir: removing directory, `./2'

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