在 Linux 中,如何获取文件夹中 1MB 及以上文件的总大小

在 Linux 中,如何获取文件夹中 1MB 及以上文件的总大小

你好,我正在清理我的服务器,我想知道如何获取一个文件夹内 1mb 及以上和 1mb 及以下文件的总大小。我得到的结果是:

ls -lh | grep 'M '

但我无法获得所有东西的总大小。

在此处输入图片描述

答案1

除了解析输出ls(这被认为是非常糟糕的做法),您还可以使用findand ,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将由人类而不是机器读取...机器有其他更好的方法来获取此类信息。

答案2

这对我有用。

ls -lh | grep 'M' | awk '{ SUM += $5} END {print SUM}'

相关内容