你好,我正在清理我的服务器,我想知道如何获取一个文件夹内 1mb 及以上和 1mb 及以下文件的总大小。我得到的结果是:
ls -lh | grep 'M '
但我无法获得所有东西的总大小。
答案1
除了解析输出ls
(这被认为是非常糟糕的做法†),您还可以使用find
and ,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}'