我在 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 描述的相同操作。