以下命令列出 50 个最大的目录(递归工作):
du --separate-dirs -hc . | sort -hr | head -50
从性能角度来看,最好的方法是什么保持输出格式相同另外还可以将参数作为输入传递给函数,即myfunc doc docx xls xlsx ppt
。使用的新 50 个目录myfunc
应按如下方式从上到下列出:第一个目录应该是包含最大的目录组合尺寸文件的doc OR docx OR xls OR xlsx OR ppt
数量 - 为此应完全忽略其余文件类型(而不是根据du
命令显示每个目录的总大小)。
我注意到它du
有--exclude
参数(这不能帮助我),而且我似乎正在寻找--filter
不存在的参数。
find . \( -type f -name "*.doc" \) -o \( -type f -name "*.docx" \) -o \( -type f -name "*.xls" \) -o \( -type f -name "*.xlsx" \) -o \( -type f -name "*.ppt" \) -printf '%s\n' | awk '{s+=$0} END{print s+0}' | numfmt --to=iec --suffix=B --padding=7
我尝试过的其他一些方法(如上面的方法)似乎比du
.有任何想法吗?
答案1
我认为你有三个选择:
将 du 重写为过滤器。 Perl 的 File::Find 可能是一个很好的起点。
编写一个仅显示选定文件的代理文件系统。熔断器的实现可能是一个好的开始。预期表现不佳。
修改现有的 du 实施。
答案2
我在 GitHub 上创建了一个小项目,它重新创建了我刚才在此处描述的内容。它通过使用 的单个输出find
并解析 中的其他所有内容进行了完全优化AWK
。欢迎贡献: