Add scripts 'show-deleted-mailboxes.sh' and 'show-deleted-maildomains.sh'.
This commit is contained in:
Executable
+105
@@ -0,0 +1,105 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Gelöschte Mailboxen nach Maildomain auflisten.
|
||||||
|
standardverzeichnis=/var/deleted-maildirs
|
||||||
|
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=()
|
||||||
|
domains=()
|
||||||
|
|
||||||
|
verzeichnisse=()
|
||||||
|
for domainverzeichnis in "${basisverzeichnis%/}"/*/; do
|
||||||
|
if [[ ! -r $domainverzeichnis || ! -x $domainverzeichnis ]]; then
|
||||||
|
printf 'Domainverzeichnis ist nicht zugänglich: %s\n' "$domainverzeichnis" >&2
|
||||||
|
status=1
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
verzeichnisse+=("${domainverzeichnis%/}"/*/)
|
||||||
|
done
|
||||||
|
|
||||||
|
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]}")
|
||||||
|
domainpfad=${pfad%/*}
|
||||||
|
domains+=("${domainpfad##*/}")
|
||||||
|
|
||||||
|
# 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
|
||||||
|
letzte_domain=''
|
||||||
|
for index in "${!namen[@]}"; do
|
||||||
|
domain=${domains[index]}
|
||||||
|
if [[ $domain != "$letzte_domain" ]]; then
|
||||||
|
if [[ -n $letzte_domain ]]; then
|
||||||
|
printf '\n'
|
||||||
|
fi
|
||||||
|
printf '%s\n' "$domain"
|
||||||
|
printf '%*s\n' "${#domain}" '' | tr ' ' '-'
|
||||||
|
letzte_domain=$domain
|
||||||
|
fi
|
||||||
|
name=${namen[index]}
|
||||||
|
padding=$(( namensbreite - ${#name} ))
|
||||||
|
printf -v zeile 'Mailbox: %s%*s Löschdatum: %s - Größe: %*s' \
|
||||||
|
"$name" "$padding" '' "${loeschdaten[index]}" \
|
||||||
|
"$groessenbreite" "${groessen[index]}"
|
||||||
|
printf '%s\n' "$zeile"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '\n\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"
|
||||||
Executable
+84
@@ -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"
|
||||||
Reference in New Issue
Block a user