Script Bash - apague todos os arquivos mais antigos, mas deixe um por motivos de segurança

3

Eu escrevi um script:

#!/bin/bash
dir=/opt/bla/myfiles
# Check disk usage usep=$(df -H | grep /dev/sda3 | awk '{print $5}' | cut -d '%' -f1)   if [ $usep -ge 90 ]; then
    echo "$(date) Running out of space in /dev/sda3 with $usep percent - so deleting action is taking!" >> /var/log/messages &&
        find $dir/releases/* -mtime +3 -exec rm {} \; else
        echo "$(date) Disk space is $usep percent - no action required!" /var/log/messages   fi

que funciona muito bem. Mas eu preciso de método mais avançado agora. Como você pode ver, ele apaga todos os arquivos no diretório com mais de 3 dias. Eu tenho muitos lançamentos, por exemplo: 1.31.1 1.31.2 1.31.3 ...... 1,31.150 1.32.1 1.32.2

e assim por diante. Eu quero excluir todos os lançamentos, exceto o último da compilação principal 1,31 / 1,32. Como? Não pode ser um nome estático, porque um dia seria 2.32.150

ls -l
total 520
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 15:45 0.0.31-SNAPSHOT
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 15:45 1.33.0.100-RELEASE
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 15:45 1.33.0.101-RELEASE
drwxr-xr-x 2 jenkins jenkins 4096 Jun  8 11:00 1.33.0.58-RELEASE
drwxr-xr-x 2 jenkins jenkins 4096 Jun  8 11:00 1.33.0.59-RELEASE
drwxr-xr-x 2 jenkins jenkins 4096 Jun  8 11:00 1.33.0.64-RELEASE
drwxr-xr-x 2 jenkins jenkins 4096 Jun  8 11:00 1.33.0.66-RELEASE

Qualquer ideia, obrigado!

    
por Prologas 26.07.2017 / 18:13

1 resposta

1

Aqui está uma maneira:

#!/bin/bash

targetDir=/opt/bla/myfiles;
## declare 'releases' as an associative array
declare -A releases
cd "$targetDir"
## Iterate over all directories in $targetDir. 
for dir in */; do
        ## remove the trailing slash
        dir="${dir%/}"
        ## Extract the version string
        ver="${dir%%-*}"

        ## Use the version as the key for the associative array 
        releases["$ver"]="$dir";
done
## Get the newest version; sort -h understands version numbers
newestVersion=$( printf '%s\n' "${!releases[@]}" | sort -h | tail -n1)
## This is probably not needed as extended globbing should be on by default
shopt -s extglob
## Delete the rest. The '$targetDir/' isn't necessary but it's safer
## just in case we're not actually where we think we are. 
rm -rf  $targetDir/!("${releases[$newestVersion]}")

Advertências :

  1. Isso pressupõe que você tenha apenas diretórios em /opt/bla/myfiles .
  2. Ele excluirá tudo, exceto o diretório da versão mais recente.
por terdon 27.07.2017 / 10:54
A janela congela quando o botão do mouse e do teclado é pressionado ao mesmo tempo ___ qstntxt ___ ___ tag123keyboardlayout ___ Perguntas sobre o layout e a configuração do teclado. ___ tag123upgrade ___ Perguntas sobre como atualizar pacotes, sistemas ou hardware. ___ tag1231704 ___ O Ubuntu 17.04 (Zesty Zapus) foi lançado em 13 de abril de 2017 e terá suporte por 9 meses até janeiro de 2018. Use esta tag apenas para perguntas específicas sobre versões. ___ answer973007 ___

É conhecido o bug feio - veja o bug da barra de lançamento 1245473 .

Estou escrevendo isso do Ubuntu 16.04.3 LTS com o MATE DE. Não tem esse problema.
Estou usando o Kbd + Shift comutador de layout para os idiomas inglês e russo.

Mas o MATE no Ubuntu 17.10 tem esse problema - veja outro bug do launchpad 1720364 .

Minha posição completa está escrita no comentário 528 para o bug 1218322 na barra de lançamento .

    
___