#!/bin/bash if [ $# -ne 1 ] || [ -n "${1##*/courierimapuiddb}" ]; then >&2 printf 'usage: %s dir/courierimapuiddb' "$0" exit 1 fi dir="${1%/courierimapuiddb}" >&2 printf 'reordering %s ...\n' "$dir" cd "${dir}/cur" tmp_dir=$(mktemp -d) trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT while read -r n i; do is_ok=true if f=$(ls "${i}"*) \ && d=$( sed -n ' /^$/q s/^[Dd]ate: // T p ' "$f" \ |head -n1 ) \ && [ -n "$d" ] \ && d=$(date +%s -d"$d"); then printf '%s %s\n' "$d" "$i" \ >>"${tmp_dir}/to-sort" else printf '%s %s\n' "${i%%.*}" "$i" fi done \ < <(sed 1d ../courierimapuiddb) { sed -n 1p ../courierimapuiddb sort -k1n,1 "${tmp_dir}/to-sort" \ |cat -n \ |sed ' s/^\s*\(\S\+\)\s\+\S\+\s\+\(\S.*\)$/\1 \2/ ' } \ >"${tmp_dir}/sorted" if diff -u --color <( sed 's/^\S\+ //' ../courierimapuiddb | sort ) <( sed 's/^\S\+ //' "${tmp_dir}/sorted" | sort ); then mv "${tmp_dir}/sorted" ../courierimapuiddb fi >&2 printf '... done\n'