我有一个文件夹,其中包含大量tar.xz
包,这些包的文件名中包含版本号。例如:(
vlc-2.2.2-3-x86_64.pkg.tar.xz
旧的,应该删除)
vlc-2.2.3-2-x86_64.pkg.tar.xz
(新的,所以应该保留)
bash 脚本的任务是检查旧包并删除它们,保留新包和没有重复的包。
答案1
适合这项工作的工具是paccache
1:
paccache -r -k 1 -c /path/to/cache/dir
这将删除每个包的所有缓存版本,除了通过指定的缓存目录中的-r
最新版本之外 。您始终可以将旧包移动到另一个目录,而不是立即删除它们,然后才删除它们。 运行以获取更多详细信息。-k 1
-c
paccache -h
1:pacman 软件包中包含灵活的 pacman 缓存清理实用程序
答案2
给定一个文件夹pool
,保留每个包的最后 42 个版本。这假设包名称及其版本用下划线分隔。
pkgs=`find ${pool} -type f | cut -f1 -d_ | sort | uniq`
for pkg in ${pkgs}; do
find `dirname ${pkg}` -name "`basename ${pkg}`_*" | sort -rV | sed -e '1,42d' | xargs -r rm
done