使用shell脚本删除前10个最大的常规文件

时间:2017-04-27 15:01:24

标签: linux bash shell unix

我试图从给定目录中删除第一大常规文件,但它不适用于包含空格字符的文件。

我的代码(如果文件不包含空格字符,则可以使用):

find mydir -type f -exec du -ahb {} + | sort -n -r | cut -f2 | head -n 10 | xargs rm -i

我也试过了,但它会显示错误消息:

find mydir -type f -exec du -ahb {} + -print 0 | sort -n -r | cut -f2 | head -n 10 | xargs -0 rm -i

1 个答案:

答案 0 :(得分:1)

以下内容应该至少适用于GNU coreutils 8.25和更新版本:

find mydir -type f -exec du -0b {} + | sort -znr | cut -zf2 | head -zn 10 |  xargs -0pn 1 rm

我确保每个命令都处理并输出NUL字节(\0)分隔的记录而不是换行分隔的记录:

  • du-0
  • 输出NUL分隔的记录
  • sortcuthead使用-z
  • 处理和输出NUL分隔的记录
  • xargs使用-0
  • 处理NUL分隔的记录

此外,我删除了rm的互动模式,并要求xargs代替(-p),因为xargs没有提供提示调用它时rm。我必须将一次性给出的参数数量限制为rm为1才能使其生效(xargs' -n 1参数)。可能有一种方法可以保留-i并为rm提供一个提示界面,但我不知道如何。

最后一点:我删除了du -h uman-readable模式,因为它会使排序经常失败并且它没有任何用途,因为文件大小是永远不会向人类展示。