我在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程所描述的相同的事情。