如何在Linux中仅查找大于100MB或1G的文件夹

时间:2018-09-11 02:35:05

标签: shell unix

我实际上已经尝试了几个博客中的一些命令,但是它似乎无法正常工作。在以下情况下,我提到要查找从500M到1000MB的文件夹,但是它也显示较小的文件夹。

https://www.unixtutorial.org/2014/07/how-to-find-directories-larger-than-1gb-in-linux/

global1:/u01/app/oowner/diag/rdbms> du -h --max-depth=1 /u01/app/oowner/diag/rdbms  | grep '[500-1000]M\>' | sort -r
975M    /u01/app/oowner/diag/rdbms/uscs01
7.5M    /u01/app/oowner/diag/rdbms/qscs8
615M    /u01/app/oowner/diag/rdbms/tscss11
45M     /u01/app/oowner/diag/rdbms/cst01c1
41M     /u01/app/oowner/diag/rdbms/cst01
3.1M    /u01/app/oowner/diag/rdbms/tscss12

非常感谢您在此命令方面的帮助。

谢谢 穆罕默德巴。

1 个答案:

答案 0 :(得分:0)

grep不能那样工作。它使用字符范围而不是数字范围。

例如[a-c]匹配abc。 不使用-时,任何字符都将匹配[abc]也会匹配abc

因此[0-1]匹配01

[500-1000]匹配500100或{{1} }。 它与0

最后,在搜索到的行中的任何地方都找到了匹配项,因此例如[015]也将行与[015]M匹配。

匹配500-999的解决方案是:

7777775M

要匹配500-1000,它将变得更加复杂:

^[5-9]\?[0-9]\?[0-9](\.[0-9]*)\?M


我建议不要使用正则表达式来解析数字范围。

如果您想继续使用某些grep,则可以使用^\([5-9]\|10\)\?[0-9]\?[0-9](\.[0-9]*)\?M甚至Shell循环。 awk快得多,shell循环看起来像这样:

awk
@PackardCPW对这个问题的评论提到了

du -h --max-depth=1 /u01/app/oowner/diag/rdbms | grep '^[0-9\.]*M' | while read -r line; do num=$(echo "$line" | grep -o '^[0-9]*') if test "$num" -ge 500; then echo "$line" fi done | sort -rh