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

Shell 如何在linux中仅查找大于100MB或1G的文件夹,shell,unix,Shell,Unix,实际上,我从几个博客上尝试了一些命令,但似乎不能正常工作。在下面的例子中,我提到要查找从500M到1000MB的文件夹,但它也显示较小的文件夹 非常感谢您在这方面的帮助 谢谢 MohammedBa.grep不是这样工作的。它使用字符范围而不是数字范围 例如[a-c]匹配a或b或c。 当不使用-时,任何字符都是匹配的[abc]也匹配a或b或c 因此[0-1]匹配0或1 和[500-1000]匹配5或0或0或1或0或0。 它与[015] 最后,在搜索的行中的任何位置都会找到匹配项,因此,例如[01

实际上,我从几个博客上尝试了一些命令,但似乎不能正常工作。在下面的例子中,我提到要查找从500M到1000MB的文件夹,但它也显示较小的文件夹

非常感谢您在这方面的帮助

谢谢
MohammedBa.

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

例如
[a-c]
匹配
a
b
c
。 当不使用
-
时,任何字符都是匹配的
[abc]
也匹配
a
b
c

因此
[0-1]
匹配
0
1

[500-1000]
匹配
5
0
0
1
0
0
。 它与
[015]

最后,在搜索的行中的任何位置都会找到匹配项,因此,例如
[015]M
也会匹配具有
77775m
的行

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

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

要匹配500-1000,它会变得更复杂一些:

^\([5-9]\\\124; 10\)\?[0-9]\?[0-9](\[0-9]*)\?M


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

如果您想继续使用grep,可以使用
awk
甚至shell循环。awk要快得多,shell循环看起来像这样:

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
@PackardCPW在对该问题的评论中提到了awk

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