我正在寻找一种方法来搜索大于特定大小的目录。我发现以下内容非常有效:
# 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
选项适用于du
CentOS 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