Encontre todas as versões antigas com base na versão do nome do arquivo

1

Isso é semelhante a essa pergunta: remova o baixo número de versão de arquivo

Infelizmente, a solução para a pergunta acima não funciona para mim, por exemplo:

Arquivos ( ls -vr *.pkg.tar.xz ):

wire-desktop-bin-2.11.2700-1-x86_64.pkg.tar.xz
wire-desktop-bin-2.11.2698-1-x86_64.pkg.tar.xz
wire-desktop-bin-2.11.2697-1-x86_64.pkg.tar.xz
webstorm-2016.3.3-1-x86_64.pkg.tar.xz
webstorm-2016.3.2-1-x86_64.pkg.tar.xz
visual-studio-code-1.9.0-1-x86_64.pkg.tar.xz
visual-studio-code-1.8.1-3-x86_64.pkg.tar.xz
pycharm-professional-2016.3.2-1-any.pkg.tar.xz
plasma5-applets-thermal-monitor-git-r63.fd41970-1-any.pkg.tar.xz
masterpdfeditor-qt5-3.7.10-2-x86_64.pkg.tar.xz
masterpdfeditor-4.0.30-1-x86_64.pkg.tar.xz
keepass-plugin-keeagent-0.8.1-3-any.pkg.tar.xz
jre-8u121-1-x86_64.pkg.tar.xz
jdk-8u121-1-x86_64.pkg.tar.xz
jabref-3.8.1-1-any.pkg.tar.xz
intellij-jdk-8u112b719-1-x86_64.pkg.tar.xz
intellij-jdk-8u112b657-1-x86_64.pkg.tar.xz
intellij-idea-ultimate-edition-2016.3.4-1-any.pkg.tar.xz
intellij-idea-ultimate-edition-2016.3.3-1-any.pkg.tar.xz
hstr-git-1.21.r10.gc0d3236-1-x86_64.pkg.tar.xz
google-chrome-56.0.2924.87-1-x86_64.pkg.tar.xz
google-chrome-56.0.2924.76-1-x86_64.pkg.tar.xz
gitinspector-0.4.4-1-any.pkg.tar.xz
dropbox-17.4.33-1-x86_64.pkg.tar.xz
chromium-widevine-1:1.4.8.962-1-x86_64.pkg.tar.xz

Agora eu preciso encontrar (e depois remover) todos os pacotes antigos (número da versão! = maior).

Usando a solução da outra pergunta:

ls -vr *.depot | awk -F- '$1 == name{system ("rm \""$0"\"")}{name=$1}'

produz este resultado errado :

:: os/x86_64 » ls -vr *.pkg.tar.xz | awk -F- '$1 == name{system ("echo \""$0"\"")}{name=$1}'
wire-desktop-bin-2.11.2698-1-x86_64.pkg.tar.xz
wire-desktop-bin-2.11.2697-1-x86_64.pkg.tar.xz
webstorm-2016.3.2-1-x86_64.pkg.tar.xz
visual-studio-code-1.8.1-3-x86_64.pkg.tar.xz
masterpdfeditor-4.0.30-1-x86_64.pkg.tar.xz
intellij-jdk-8u112b657-1-x86_64.pkg.tar.xz
intellij-idea-ultimate-edition-2016.3.4-1-any.pkg.tar.xz <-----------
intellij-idea-ultimate-edition-2016.3.3-1-any.pkg.tar.xz <-----------
google-chrome-56.0.2924.76-1-x86_64.pkg.tar.xz

Observe que isso lista ambos idea-ultimate-edition packages por causa de intellij-jdk (o awk divide primeiro - ). Eu realmente não sei como resolver este problema de forma consistente.

Estes são pacotes Archlinux, mesmo que o pacman (gerenciador de pacotes Archlinux) possa me ajudar aqui, eu esteja construindo e armazenando-os em um sistema Debian, então eu prefiro um puro bash / awk / etc. solução.

    
por dav1d 02.02.2017 / 20:35

1 resposta

1

Você precisa de um regex completo para isolar a string da versão em movimento. Delimitado o nome da base com um caractere não usado e classificá-lo como único.

Por exemplo, crie um arquivo de índice com = as delimter:

perl -le 'map { print "$1=$2" if /(\S+)-((\S+-\d+)-(x86_64|any)\.\S+)/ } @ARGV' *.pkg.tar.xz > pkgindex

Classifique-o como exclusivo e altere o delimitador de volta:

sort -t= -r -k1,1 -u pkgindex | sed s/=/-/ > freshpkgs

Não se esqueça de preencher a string de arquitetura com todos os valores conhecidos (x86_64, i386, any)!

    
por 04.02.2017 / 12:26