du 阈值的替代方案

du 阈值的替代方案

我正在寻找一种方法来搜索大于特定大小的目录。我发现以下内容非常有效:

# du -sh /var/log/ --threshold=5G
5.3G    /var/log/

问题是 --threshold 似乎只在 Ubuntu 中受支持,例如当我在 CentOS 上尝试时,我得到:

# du -sh /var/log/ --threshold=5G
du: unrecognized option '--threshold=5G'
Try `du --help' for more information.

有谁知道有一个可以在 CentOS、Ubuntu 和 Debian 上运行的替代方案吗?

我应该注意,我肯定需要等效的东西来支持 du -s 标志(不包括子目录的大小)。

答案1

--threshold是一个可用命令:

  • 乌班图 18.04 / 20.4
  • Debian jessie 8/stretch 9 巴斯特 10
  • 森托斯7

一个大的命令行:

(
  THRESHOLD='200M' 
  PATTERN='==========---------========----'
  ( 
    sudo find / -type d -print0 2>/dev/null | \
         sudo xargs -0 -P4 -- du -sh  2>/dev/null ;
    echo "${THRESHOLD} ${PATTERN}" 
  ) | sort -h | sed "0,/${PATTERN}/ d"
)

注释: 当文件夹名称中有空格时,-print0两个文件之间的分隔符很有帮助\0

-0告诉 xargs 读取具有分隔符的流\0

-P4告诉以一定程度的并行度运行 4

0,/REGEX/ d告诉sed删除第一行和匹配 REGEX 的行之间的行

附:

这在 Centos 6 中不可用

答案2

正如 #EchoMike444 提到的,该--threshold选项适用于duCentOS 7 中的命令,但不适用于 CentOS 6 及更早版本。由于我缺乏声誉,我无法评论他的解决方案,但我想说它效果很好。我不太理解该sed命令,因此这里有一些替代命令可能会帮助您完成任务。

您发布的命令只会总结/var/日志/目录,但不包含任何子目录。

# du -sh /var/log/ --threshold=5G

如果您使用的是 CentOS 7,以下命令将显示 /var/log/ 目录树中所有 5G 或更大目录的存储空间使用情况。

# find /var/log/* -type d | xargs du -h --threshold=5G | sort -hr

我不太确定您打算如何使用它,但这里有一些可能对您有用的东西。虽然以下命令不会准确地提供您要查找的内容,但它会识别该目录中 10 个最大的子目录/var/日志/目录。任何高于 echo 命令输出的内容都将是您要查找的内容。

# (find /var/log/* -type d -exec du -sh {} \; ; echo "5G ####################") | sort -hr | head

如果您想保持简单,以下命令将给出与上面相同的结果,但没有 echo 命令的输出。

# find /var/log/* -type d -exec du -sh {} \; | sort -hr | head

如果您正在查找 5G 或更大的文件,那么以下命令将为您提供这些结果。

# find /var/log/ -size +5G -exec ls -l {} \; | sort -nr -k5

相关内容