One-liner to clean DNF package cache but keep latest version of each package

If you’re running Fedora or Red Hat and have turned on the DNF package cache, eventually you’ll start using gigabytes of disk space. Simply running dnf clean packages will erase everything in the package cache.

But what if you want to preserve the latest version of each package and just delete the outdated versions? For example, to keep a local cache of the latest version of each package you’ve installed, and so that DRPM will work.

Here’s how:

cd /var/cache/dnf
for y in `find . -maxdepth 2 -type d -name 'packages'`; do cd $y; for x in `ls *.rpm | grep -Po '^.*?(?=-[0-9])' | sort -r | uniq`; do ls ${x}-*.rpm | grep -P "^${x}-[0-9]" | head -n -1 | xargs rm -f; done; cd ../..; done

Disk space used before and after on my laptop:

cd /var/cache/dnf
du -hs .
7.5G	.
# run one-liner above
du -hs .
1.8G	.

Filed under: Blog, Code, Systems.  Tagged: , .

No comments »

No comments yet.

Add a comment

You can also log in (or register) for easier commenting on lyncd.