gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:12 24 4
gpt4 key购买 nike

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

我的代码(如果文件不包含空白字符,它就可以工作):

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

最佳答案

以下至少适用于 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-human-readable 模式,因为它会使排序经常失败并且它没有任何作用,因为文件大小从未显示给人类。

关于linux - 使用shell脚本删除前10个最大的常规文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43661422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com