#!/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"