Como eu adiciono tamanhos de arquivo no Bash by pattern em array / list?

3

Eu tenho estas versões de kernel instaladas que através do trabalho de reinicialização cron foram "tocadas" com a última data de acesso:

/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

Para um dado kernel eu gostaria de adicionar o tamanho do arquivo para mostrar quanto espaço pode ser salvo excluindo aquele kernel. Por exemplo 4.7.1 é a história antiga em termos de computador e no Fim da Vida (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

Qual seria a melhor maneira de criar uma lista / array de:

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

O plano é apresentar essa lista usando zenity com a opção de excluir entradas específicas da partição para economizar espaço. Eu instalo novos kernels uma ou duas vezes por semana (eles não saem mais todo domingo como costumavam fazer), então minha partição de 30 GB precisa de poda a cada dois ou três meses.

    
por WinEunuuchs2Unix 09.03.2017 / 03:54

3 respostas

2

Use du para obter o tamanho total e stat para obter o tempo de acesso:

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

Saída:

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
    
por muru 09.03.2017 / 04:21
1

Aqui está uma versão de Rube Goldberg, caso você esteja procurando algo para dissecar em um script ...

ls -l|grep "4.8" |awk '{print }'|paste -s -d+ |bc
    
por James 09.03.2017 / 04:49
0

É para isso que o comando du foi projetado. Apenas faça du -s *4.7.1* e ele lhe dará o tamanho (execute o loop para cada versão do kernel instalada). Você também pode usar sinalizadores como -h ou -k para alterar o formato de saída. Veja man du para todas as possibilidades.

    
por Joseph Sible 09.03.2017 / 04:20