查找并删除数百个目录中除 N 个最大文件之外的所有文件

查找并删除数百个目录中除 N 个最大文件之外的所有文件

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

假设我可以为此使用一些“查找”魔法,但不太确定如何使用。

答案1

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

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

这将打印/path/to/dir目录下的所有文件,计算每个文件的大小,按大小排序,提取所有(前 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

/path包含所有同级目录的父目录在哪里。这将通过在每个同级目录上单独执行工作流来实现 @TomNewton 描述的相同操作。

相关内容