#!/bin/sh dir="$1" cd $dir || exit 1 for f in *.rpm ; do g=$(rpm --qf '%{GROUP}' -qp $f) level=".." a="$g" b= while [ "$a" != "$b" ]; do b="$a" a=${a#*/} level="${level}/.." done [ -d "../by-group/$g" ] || mkdir -p "../by-group/$g" ln -sf "$level/RPMS/$f" "../by-group/$g/$f" done # remove dangling symlinks... symlinks -dr $dir/../by-group # and empty directories find $dir/../by-group -depth -type d -empty -exec rmdir {} \;