我实际上已经尝试了几个博客中的一些命令,但是它似乎无法正常工作。在以下情况下,我提到要查找从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
非常感谢您在此命令方面的帮助。
谢谢 穆罕默德巴。
答案 0 :(得分:0)
grep
不能那样工作。它使用字符范围而不是数字范围。
例如[a-c]
匹配a
或b
或c
。
不使用-
时,任何字符都将匹配[abc]
也会匹配a
或b
或c
。
因此[0-1]
匹配0
或1
。
与[500-1000]
匹配5
或0
或0
或1
或0
或0
或{{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