Как я складываю размеры файла в Bash шаблоном в массив / список?

Мне установили эти версии ядра, которые через задание перезагрузки крона были "затронуты" с последней датой доступа:

/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

План состоит в том, чтобы представить этот список с помощью zenity с опцией удалить определенные записи из раздела для оставления свободного места. Я устанавливаю новые ядра несколько раз неделя (они больше не выходят каждое воскресенье как, они привыкли для), так мои потребности раздела на 30 ГБ, сокращающие каждые два или три месяца.

3
задан 9 March 2017 в 06:23

3 ответа

Использовать 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
ответ дан 1 December 2019 в 16:20

Вот версия Rube Goldberg, в случае, если Вы ищете что-то для разделения в сценарии...

ls -l|grep "4.8" |awk '{print $5}'|paste -s -d+ |bc
1
ответ дан 1 December 2019 в 16:20

Это - то, для чего эти du разработана команда. Просто сделайте du -s *4.7.1*, и это даст Вам размер (циклично выполните это для каждой установленной версии ядра). Можно также использовать флаги как -h или -k для изменения выходного формата. См. man du для всех возможностей.

0
ответ дан 1 December 2019 в 16:20

Другие вопросы по тегам:

Похожие вопросы: