求Windows 10/Debian命令行工具:按指定子文件夹大小排序父文件夹
Windows 10/Debian命令行工具:按指定子文件夹大小排序父文件夹
嘿,刚好我之前帮朋友处理过类似的mod文件夹排序需求,给你分别整理Windows 10和Debian下的命令行解决方案,完全匹配你的场景——不管mod有没有sounds子文件夹、里面是空的还是嵌套多层子目录,都能准确计算总大小并排序输出。
Windows 10 解决方案(用PowerShell,系统自带无需额外安装)
先打开PowerShell,切换到SteamWorkshop/GameID这个目录(比如用cd D:\SteamWorkshop\12345这样的命令),然后直接运行下面的脚本:
Get-ChildItem -Directory | ForEach-Object { $soundDir = Join-Path $_.FullName "sounds" $totalSize = if (Test-Path $soundDir -PathType Container) { # 递归计算sounds文件夹下所有文件的总大小 (Get-ChildItem $soundDir -Recurse -File | Measure-Object -Property Length -Sum).Sum } else { # 没有sounds文件夹就设为0 0 } # 把结果封装成易读的对象 [PSCustomObject]@{ Mod名称 = $_.Name Sounds大小(MB) = [math]::Round($totalSize / 1MB, 3) } } | Sort-Object -Property "Sounds大小(MB)" -Descending | Format-Table -AutoSize
关键点说明:
Get-ChildItem -Directory:只抓取当前目录下的mod父文件夹(就是mod1、mod2这些)- 自动判断
sounds文件夹是否存在,不存在就直接记为0大小 - 递归遍历
sounds里的所有嵌套子目录和文件,精准统计总大小 - 最后按大小从大到小排序,用表格格式输出,清晰直观
- 如果要把结果保存到文本文件,就在命令最后加
| Out-File "mod_sound_sizes.txt"
Debian(Linux)解决方案(用Bash,系统自带)
打开终端,切换到目标目录(比如cd ~/SteamWorkshop/GameID),运行下面的单行命令:
for dir in */; do mod_name="${dir%/}" sound_dir="$mod_name/sounds" if [ -d "$sound_dir" ]; then # 用du命令递归计算sounds的总字节数 total_size=$(du -sb "$sound_dir" | cut -f1) else total_size=0 fi echo "$total_size $mod_name" done | sort -nr | awk '{printf "%s sounds: %.3fMB\n", $2, $1/1024/1024}'
关键点说明:
for dir in */;:遍历当前目录下所有子文件夹du -sb:精准计算目标文件夹的总大小(-s是汇总,-b是按字节统计,避免不同系统的单位差异)sort -nr:按总字节数倒序排序(数字从大到小)awk负责把字节转成MB并保留三位小数,输出成你想要的格式- 空的
sounds文件夹也会被识别为0大小,自动排在末尾
备注:内容来源于stack exchange,提问作者wololoo
相关产品推荐
相关产品推荐

