如何获取目录 /etc 中 .conf 扩展名的总大小并将其保存到另一个文件中?

如何获取目录 /etc 中 .conf 扩展名的总大小并将其保存到另一个文件中?

如何使用 Bash 脚本获取目录 /etc 中 .conf 扩展名的字节总大小并将其保存到 total_size.txt 中。

这是我的脚本:-

#!/bin/bash
touch /home/onyic/total_size.txt
echo "$(du -csh -B1 /etc/*.conf)" >> ~/total_size.txt

我知道 echo 实际上只是打印它。这就是为什么我需要你的帮助。

我的脚本的更新版本:-

#!bin/bash
find /etc -name '*.conf' -print0 | du -csh -B1 --files0-from=- | awk 'END {print $1}' >> ~/total_size.txt

答案1

使用这种方法,您将错过 之类的文件/etc/apache2/apache2.conf,它们位于 的子目录中/etc。您应该使用find来选择 的文件du

find /etc -name '*.conf' -print0 | du --files0-from=-

然后您可以使用awk从最后一行获取总数:

find /etc -name '*.conf' -print0 | du --files0-from=- | awk 'END {print $1}'

您已经知道如何将输出放入文件中。

  • find /etc -name '*.conf' -print0/etc列出名称匹配的文件(实际上,任何文件)*.conf,但每个文件名后都有一个空字节(-print0)。由于文件名中不允许出现空字节,因此它非常适合分隔文件名。
  • du --files0-from=-从标准输入 ( -) 读取文件名,文件名由空字节分隔(这就是 e-print0与 一起使用的原因find
  • awk 'END {print $1}'$1仅打印最后一行的第一列( )。

答案2

如果您只想要总大小,这是du输出的最后一行:

$ du -csh -B1 /etc/*.conf
4096    /etc/asound.conf
...
192512  total

您可以使用tail+cut来获取该值:

$ du -csh -B1 /etc/*.conf  | tail -n1 | cut -f1
192512

tail取最后一行,cut取第一列。所以:

du -csh -B1 /etc/*.conf  | tail -n1 | cut -f1 >> ~/total_size.txt

顺便说一句,这个文件touch ...是没用的。如果需要的话,shell 会创建这个文件。

答案3

stat -c %s /etc/*.conf | awk '{total = total + $1}END{print total}' > ~/total_size.txt

或者如果你喜欢“du”,不带 -b 开关的 du 会给出磁盘使用情况,-b 开关会给出文件大小(以字节为单位)。

du --help

用法:du [选项]... [文件]...

-b, --bytes 相当于 '--apparent-size --block-size=1'

du -bc /etc/*.conf | cut -f1 | tail -1 > ~/total_size.txt

区别:

$ du -csh -B1 /etc/*.conf  | tail -n1 | cut -f1
208896
$ du -bc /etc/*.conf | cut -f1 | tail -1
108396
$ stat -c %s /etc/*.conf | awk '{total = total + $1}END{print total}' 
108396

相关内容