嗨,即时通讯正在我的服务器上做一些清理工作,我想知道我将如何获取文件文件夹的总大小,该文件大小为1mb以上,以及1mb以下。我得到了:
ls -lh | grep 'M '
但是我无法得到所有东西的总大小。
相反解析的输出ls
(这被认为是非常糟糕的做法†),你可以使用find
和du
像这样:
要查找-type f
当前目录和子目录中≥1M(-size +1M
)的所有文件(),并获取其大小的总和:
find . -type f -size +1M -print0 | du -sch --files0-from=- | tail -1
类似,但不递归到子目录(-maxdepth 1
):
find . -maxdepth 1 -type f -size +1M -print0 | du -sch --files0-from=- | tail -1
对于大小≤1M的文件:
find . -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
find . -maxdepth 1 -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
如果您的du
支持版本支持该--files0-from
选项,则此方法有效。如果没有,您可以尝试以下方法:
find . -type f -size +1M -exec du -sch {} + | tail -1
但是如果文件太多,它将无法正常工作(您将得到错误的答案)!在这种情况下,您可以尝试以下方法:
find . -type f -size +1M -exec sh -c 'du -sch "$@" | tail -1' _ {} +
然后,您将有几行(希望不是太多),并且您必须自己做数学。
随着find
你必须要考虑哪些文件完全控制!它的过滤可能性几乎是无止境的。
干杯!
†ls -1h | grep 'M '
如果您有包含字符串的文件, 您将得到错误的答案"M "
。而且的输出ls
应由人类而非机器读取...机器还有其他更好的方式来获取此类信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句