如何在 Bash 中按模式将文件大小添加到数组/列表中?

如何在 Bash 中按模式将文件大小添加到数组/列表中?

我安装了这些内核版本,它们通过 cron 重启作业被“修改”了上次访问日期:

/boot$ ll vmlinuz*
-rw------- 1 root root 5836336 Jan  8 20:00 vmlinuz-3.13.0-92-generic
-rw------- 1 root root 5017584 Oct 18 13:28 vmlinuz-3.2.0-113-generic
-rw------- 1 root root 7069136 Jan 25 16:58 vmlinuz-4.4.0-59-generic
-rw------- 1 root root 7070992 Feb  8 19:38 vmlinuz-4.4.0-62-generic
-rw------- 1 root root 7087088 Feb 21 04:26 vmlinuz-4.4.0-63-generic
-rw------- 1 root root 7087152 Feb 20 06:40 vmlinuz-4.4.0-64-generic
-rw------- 1 root root 7087024 Mar  3 11:25 vmlinuz-4.4.0-66-generic
-rw------- 1 root root 6988624 Nov 19 21:01 vmlinuz-4.4.33-040433-generic
-rw------- 1 root root 7046080 Jun 24  2016 vmlinuz-4.6.3-040603-generic
-rw------- 1 root root 3974752 Aug 16  2016 vmlinuz-4.7.1-040701-generic
-rw------- 1 root root 4134688 Aug 20  2016 vmlinuz-4.7.2-040702-generic
-rw------- 1 root root 4134688 Sep  7  2016 vmlinuz-4.7.3-040703-generic
-rw------- 1 root root 4138784 Jan  8 20:17 vmlinuz-4.7.5-040705-generic
-rw------- 1 root root 7431968 Nov 28 08:03 vmlinuz-4.8.10-040810-generic
-rw------- 1 root root 4994848 Oct  7 08:50 vmlinuz-4.8.1-040801-generic
-rw------- 1 root root 7415584 Jan  8 19:58 vmlinuz-4.8.11-040811-generic
-rw------- 1 root root 7431968 Jan  8 19:57 vmlinuz-4.8.12-040812-generic
-rw------- 1 root root 7427872 Oct 22 05:46 vmlinuz-4.8.4-040804-generic
-rw------- 1 root root 7427872 Nov 19 11:24 vmlinuz-4.8.5-040805-generic
-rw------- 1 root root 7485216 Jan  2 15:12 vmlinuz-4.9.0-040900-generic
-rw------- 1 root root 7419680 Feb 24 04:26 vmlinuz-4.9.10-040910-generic
-rw------- 1 root root 7485216 Jan 10 04:15 vmlinuz-4.9.1-040901-generic
-rw------- 1 root root 7419680 Mar  5 17:40 vmlinuz-4.9.12-040912-generic
-rw------- 1 root root 7419680 Mar  8 04:16 vmlinuz-4.9.13-040913-generic
-rw------- 1 root root 7403296 Jan 25 18:21 vmlinuz-4.9.4-040904-generic
-rw------- 1 root root 7403296 Feb  2 17:14 vmlinuz-4.9.5-040905-generic
-rw------- 1 root root 7419680 Feb 12 00:43 vmlinuz-4.9.8-040908-generic
-rw------- 1 root root 7415584 Feb 12 10:58 vmlinuz-4.9.9-040909-generic

对于给定的内核,我想添加文件大小以显示删除该内核可以节省多少空间。例如4.7.1用计算机术语来说,这是古代历史,并且已经到了生命终结(EOL):

/boot$ ll *4.7.1*
-rw-r--r-- 1 root root  1238700 Aug 16  2016 abi-4.7.1-040701-generic
-rw-r--r-- 1 root root   181872 Aug 16  2016 config-4.7.1-040701-generic
-rw-r--r-- 1 root root 41705644 Feb  9 16:50 initrd.img-4.7.1-040701-generic
-rw------- 1 root root  3141159 Aug 16  2016 System.map-4.7.1-040701-generic
-rw------- 1 root root  3974752 Aug 16  2016 vmlinuz-4.7.1-040701-generic

创建列表/数组的最佳方法是什么:

Kernel Version w.x.y-zzzz - Last Access - Size
Kernel Version w.x.y-zzzz - Last Access - Size
    .     .     .      .      .     .      .
Kernel Version w.x.y-zzzz - Last Access - Size

计划使用禅意可以选择从分区中删除特定条目以节省空间。我每周安装一次或两次新内核(它们不再像以前那样每周日发布),所以我的 30 GB 分区需要每两三个月修剪一次。

答案1

用于du获取总大小并stat获取访问时间:

#! /bin/bash
for f in /boot/vmlinuz*
do
    [[ $f =~ vmlinuz-(.*)-generic ]]
    v=${BASH_REMATCH[1]}
    s=$(du -ch /boot/*-$v-* | awk '/total/{print $1}')
    printf '%s - %s - %s\n' "$v" "$(stat -c %x "$f")" "$s"
done

输出:

4.4.0-21 - 2016-12-24 16:20:59.858505053 +0900 - 48M
4.4.0-57 - 2016-12-24 16:58:03.000000000 +0900 - 48M
4.4.0-59 - 2017-01-11 10:41:35.000000000 +0900 - 48M
4.4.0-62 - 2017-02-03 13:25:58.000000000 +0900 - 48M
4.4.0-64 - 2017-02-23 20:07:03.105502000 +0900 - 48M
4.4.0-66 - 2017-03-08 10:24:16.000000000 +0900 - 48M

答案2

这是一个鲁布·戈德堡 (Rube Goldberg) 版本,以防您正在寻找脚本中要剖析的内容……

ls -l|grep "4.8" |awk '{print $5}'|paste -s -d+ |bc

答案3

这就是该du命令的设计目的。只需执行它du -s *4.7.1*,它就会为您提供大小(为每个已安装的内核版本循环执行此操作)。您还可以使用-h或等标志-k来更改输出格式。请参阅man du了解所有可能性。

相关内容