ファイル名のバージョンに基づいてすべての以前のバージョンを検索します。

ファイル名のバージョンに基づいてすべての以前のバージョンを検索します。

これはこの質問に似ています。バージョン番号の低いファイルを削除

残念ながら、上記の問題に対する解決策は私にとって効果的ではありませんでした。たとえば、次のようになります。

ドキュメント( 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

すべての古いパッケージ(バージョン番号!=トップ)を見つけて、後で削除する必要があります。

他の質問の解決策を使用する:

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

これを作り出す間違った結果:

:: 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

このリストに注意してください両方 idea-ultimate-editionintellij-jdk(awkが最初に分割されるので-)パッケージします。この問題を継続的に解決する方法がわかりません。

これはArchlinuxパッケージです。ここではpacman(Archlinuxパッケージマネージャ)が役に立ちますが、私はDebianシステムでビルドして保存するので、純粋なbash / awk / etcを好みます。解決策。

答え1

モバイル版文字列を分離するには完全な正規表現が必要です。未使用の文字を使用して、基本名を区別して一意に並べ替えます。

たとえば、=を区切り文字として使用してインデックスファイルを作成するには、次の手順を実行します。

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

一意に並べ替え、区切り文字を再変更します。

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

既知のすべての値(x86_64、i386など)でアーキテクチャ文字列を埋めることを忘れないでください。

関連情報