首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用shell脚本删除前10个最大的常规文件

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

Stack Overflow用户
提问于 2017-04-27 15:01:24
回答 1查看 256关注 0票数 1

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

My code (如果文件中不包含空格字符):

代码语言:javascript
复制
find mydir -type f -exec du -ahb {} + | sort -n -r | cut -f2 | head -n 10 | xargs rm -i

我也尝试过这个,但是它给出了一个错误消息:

代码语言:javascript
复制
find mydir -type f -exec du -ahb {} + -print 0 | sort -n -r | cut -f2 | head -n 10 | xargs -0 rm -i
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-27 15:18:13

至少在GNU coreutils 8.25及更高版本中,以下内容应该有效:

代码语言:javascript
复制
find mydir -type f -exec du -0b {} + | sort -znr | cut -zf2 | head -zn 10 |  xargs -0pn 1 rm

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

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

此外,我还删除了rm的交互模式,并要求xargs处理它(-p),因为xargs在调用它时没有向rm提供提示。我必须将一次给rm的参数数限制为1,这样才能起作用(xargs-n 1参数)。可能有一种方法可以保留-i,并为rm提供一个界面以满足您的提示,但我不知道如何实现。

最后一点:我删除了du-human可读模式,因为它会使排序经常失败,而且没有任何用途,因为文件大小从未显示给人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43661422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档