Add scripts 'show-deleted-mailboxes.sh' and 'show-deleted-maildomains.sh'.

This commit is contained in:
2026-11-09 12:06:37 +01:00
parent 1ac6344d29
commit 1420bcb4e0
2 changed files with 189 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
#!/usr/bin/env bash
# Gelöschte Maildomains auflisten.
standardverzeichnis=/var/deleted-maildomains
printf '\nBasisverzeichnis [%s]: ' "$standardverzeichnis" >&2
IFS= read -r basisverzeichnis || exit 1
basisverzeichnis=${basisverzeichnis:-$standardverzeichnis}
# Auch einen eingegebenen Pfad wie ~/mailbackup unterstützen.
case $basisverzeichnis in
'~') basisverzeichnis=$HOME ;;
'~/'*) basisverzeichnis=$HOME/${basisverzeichnis:2} ;;
esac
if [[ ! -d $basisverzeichnis || ! -r $basisverzeichnis || ! -x $basisverzeichnis ]]; then
printf 'Basisverzeichnis ist nicht lesbar oder nicht zugänglich: %s\n' \
"$basisverzeichnis" >&2
exit 1
fi
shopt -s nullglob
status=0
gesamtbytes=0
namensbreite=0
groessenbreite=0
namen=()
loeschdaten=()
groessen=()
verzeichnisse=("${basisverzeichnis%/}"/*/)
muster='^([0-9]{4}-[0-9]{2}-[0-9]{2})_([0-9]{2})-([0-9]{2})_(.+)$'
for verzeichnis in "${verzeichnisse[@]}"; do
pfad=${verzeichnis%/}
[[ ${pfad##*/} =~ $muster ]] || continue
name=${BASH_REMATCH[4]}
namen+=("$name")
loeschdaten+=("${BASH_REMATCH[1]} ${BASH_REMATCH[2]}:${BASH_REMATCH[3]}")
# Belegte Bytes addieren und erst für die Ausgabe formatieren.
if groessenzeile=$(du -s -B1 -- "$verzeichnis"); then
bytes=${groessenzeile%%$'\t'*}
gesamtbytes=$(( gesamtbytes + bytes ))
groesse=$(numfmt --to=iec "$bytes")
else
groesse='?'
status=1
fi
groessen+=("$groesse")
if (( ${#name} > namensbreite )); then
namensbreite=${#name}
fi
if (( ${#groesse} > groessenbreite )); then
groessenbreite=${#groesse}
fi
done
printf '\n'
if (( ${#namen[@]} == 0 )); then
zeile='Keine passenden Unterverzeichnisse gefunden.'
printf '%s\n' "$zeile"
else
for index in "${!namen[@]}"; do
name=${namen[index]}
padding=$(( namensbreite - ${#name} ))
printf -v zeile 'Maildomain: %s%*s Löschdatum: %s - Größe: %*s' \
"$name" "$padding" '' "${loeschdaten[index]}" \
"$groessenbreite" "${groessen[index]}"
printf '%s\n' "$zeile"
done
fi
printf '\n'
printf '%*s\n' "${#zeile}" '' | tr ' ' '='
gesamtgroesse=$(numfmt --to=iec "$gesamtbytes")
printf 'Gesamtgröße: %s' "$gesamtgroesse"
if (( status != 0 )); then
printf ' (unvollständig)'
fi
printf '\n\n'
exit "$status"