#!/bin/bash function helpexit() { echo Archive the subfolders of the current directory echo " -z Compress. If not passed, will ask after tar archive" echo " -n No compression. Exit after tar archive" exit } function listfolders() { find "$1" -mindepth 1 -maxdepth 1 -type d | sort | tr '\n' '\000' } function fsize() { echo -en "\e[2K\r" [[ -z "$2" ]] || echo -n "$2 -> " ls -sh "$1" | xargs echo -n } [[ "$1" = "-h" ]] && helpexit echo 'Existing files will be overwritten!' echo Archive the following folders: listfolders . | tr "[:cntrl:]" " " echo '' echo ' to quit' read foo listfolders . | while read -r -d "" d; do echo -n $d tar cvf "$d.tar" "$d" > "$d.tar.lst" & PID=$! DU=$( nice fastdu -h "$d" & ) DUPID=$! while kill -0 "$PID" &>/dev/null; do [[ -f "$d.tar" ]] && fsize "$d.tar" "$DU" for i in {1..5}; do sleep $i; kill -0 "$PID" &>/dev/null || break 2 done done fsize "$d.tar" "$DU" kill -0 "$DUPID" &>/dev/null || kill "$DUPID" &>/dev/null echo '' done [[ "$1" = "-n" ]] && { exit } [[ "$1" = "-z" ]] || { echo 'Proceed to compress? to quit' read foo } listfolders . | while read -r -d "" d; do DU=$( fastdu -h "$d.tar" ) gzip -f "$d.tar" & PID=$! while kill -0 "$PID" >/dev/null 2>&1; do [[ -f "$d.tar.gz" ]] && fsize "$d.tar.gz" "$DU" for i in {1..5}; do sleep $i; kill -0 "$PID" &>/dev/null || break 2 done done fsize "$d.tar.gz" "$DU" echo '' done