Find

刪除內容小於給定大小的目錄的命令

  • January 17, 2022

我在一個~/foo有子目錄的目錄中工作

~/foo/alpha
~/foo/beta
~/foo/epsilon
~/foo/gamma

我想發出一個命令,檢查每個“級別 1”子目錄下的總大小,~/foo如果大小低於給定數量,則刪除目錄及其內容。

所以,假設我想刪除內容少於50K. 發出$ du -sh */回報

8.0K alpha/
114M beta/
20K  epsilon/
1.2G gamma/

我希望我的命令刪除~/alpha以及~/epsilon它們的內容。有這樣的命令嗎?我懷疑這可以通過find某種方式完成,但我不太確定如何。

使用 GNUfind和 GNU coreutils,並假設您的目錄名稱中沒有換行符:

find ~/foo -mindepth 1 -maxdepth 1 -type d -exec du -ks {} + | awk '$1 <= 50' | cut -f 2-

這將列出總內容小於 50K 的目錄。如果您對結果感到滿意並且想要刪除它們,請添加| xargs -d \\n rm -rf到命令行的末尾。

我知道這有點老了,但我有自己的 0.02 美元來做這件事,希望它可以幫助其他人。使用 GNU 並行以獲得更好的並行性能:

find . -type d | parallel du -s {} | sort -h

這將輸出 PWD 中按大小排序的所有目錄大小。反向排序:

find . -type d | parallel du -s {} | sort -hr

請注意,這sort -h也適用於du -h

~  VirtualBox VMs  $  find . -type d | parallel du -sh {} | sort -h
4.0K    ./CentOS6/dir with spaces
4.0K    ./TFE79/Snapshots
8.0K    ./Desktop_default_1614944927311_69927/Logs
8.0K    ./Desktop_default_1614945289369_20675/Logs
12K     ./Desktop_default_1614944927311_69927
12K     ./Desktop_default_1614945289369_20675
96K     ./hello-world/Logs
108K    ./hello-world
160K    ./Knoppix/Logs
172K    ./Desktop_default_1627485664080_37244/Logs
172K    ./Knoppix
208K    ./CentOS6/Logs
228K    ./Flash/Logs
880K    ./TFE8/Logs
980K    ./TFE79/Logs
260M    ./NomadOS
411M    ./Desktop_default_1627485664080_37244/Snapshots
4.5G    ./CentOS6
6.6G    ./Flash
9.4G    ./TFE8/Snapshots
13G     ./TFE8
15G     ./Desktop_default_1627485664080_37244
18G     ./TFE79
56G     .

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