Find
刪除內容小於給定大小的目錄的命令
我在一個
~/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
某種方式完成,但我不太確定如何。
使用 GNU
find
和 GNUcoreutils
,並假設您的目錄名稱中沒有換行符: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 .