在100个目录中查找并删除N个最大的文件

我在BSD / Unix系统上有100多个同级目录,每个目录都有一个文件集合。 我想删除每个目录中除N个最大的文件之外的所有文件。 (N对我来说是5)

假设我可以使用一些“发现”魔术,但不太确定。

尝试运行这个命令,我想你会喜欢它

find /path/to/dir -type f -print0 | xargs -0 du -s | sort -rn | awk 'NR>5 {print $NF}' | xargs rm -f

这将打印/path/to/dir目录下的所有文件,计算每个文件的大小,按大小sorting,提取所有文件(除了前5个文件)的名称,并将其传递给rm

要单独在每个目录上执行此操作,最好将其包装在脚本中,例如

 #!/bin/bash for DIR in `find /path -maxdepth 1 -type d` do find ${DIR} -type f -print0 | xargs -0 du -s | sort -rn | awk 'NR>5 {print $NF}' | xargs rm -f done 

Where /path是包含所有兄弟目录的父目录。 这将完成@TomNewton通过在每个兄弟目录上单独执行工作stream程所描述的相同的事情。