From bb828ac13f9010318047cf0ee427a8f1c4e51897 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Wed, 20 May 2020 18:12:36 +0200 Subject: initial commit --- reorder-maildir | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100755 reorder-maildir diff --git a/reorder-maildir b/reorder-maildir new file mode 100755 index 0000000..d0801f8 --- /dev/null +++ b/reorder-maildir @@ -0,0 +1,57 @@ +#!/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' -- cgit v1.2.3