From 82833bff40f7b37a275a9fb6f1bd955a327104e2 Mon Sep 17 00:00:00 2001 From: q Date: Tue, 16 Feb 2016 22:11:52 +0200 Subject: [PATCH] okay, i had to develop it even more --- files/archive_subfolders | 55 ++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/files/archive_subfolders b/files/archive_subfolders index 2de5b08..dc70fd8 100755 --- a/files/archive_subfolders +++ b/files/archive_subfolders @@ -2,32 +2,56 @@ function helpexit() { + BS=$( basename "$0" ) 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" + echo "Usage: $BS [-z/-n] [folder name(s)]" + echo " -z Compress. If not given, will ask action after archiving" + echo " -n No compression. Exit after TARchive" + echo " folder name: If given, archive only the named folder(s)." + echo " If not, for loop over all folders in the current directory." + exit } function listfolders() { - find "$1" -mindepth 1 -maxdepth 1 -type d | sort | tr '\n' '\000' + find "$@" -mindepth $DEPTH -maxdepth $DEPTH -type d | sort | tr '\n' '\000' } function fsize() { echo -en "\e[2K\r" [[ -z "$2" ]] || printf "%s -> " "$2" printf "%s %s" "$( timeout 1 fastdu -h "$1" )" "$1" } +function killtrap() { + kill "$PID" &>/dev/null +} -[[ "$1" = "-h" ]] && helpexit - +DEPTH=1 +FOLDERS=( ) +for ((i=1; i<=${#@}; i++)) { + [[ "${!i}" = "-h" ]] && helpexit + [[ "${!i}" = "--help" ]] && helpexit + [[ "${!i}" = "-n" ]] && { NOCOMPRESSION=1; continue; } + [[ "${!i}" = "-z" ]] && { COMPRESSION=1; continue; } + FOLDERS+=( "${!i%/}" ) + DEPTH=0 +} +[[ ${#FOLDERS[@]} -eq 0 ]] && FOLDERS+=( "." ) echo 'Existing files will be overwritten!' -echo Archive the following folders: - -listfolders . | tr "[:cntrl:]" " " -echo '' +echo -n "Archive the following folders " +[[ "$NOCOMPRESSION" -eq 1 ]] && { + echo -n without compression; +} || { + [[ "$COMPRESSION" -eq 1 ]] && echo -n with gzip compression +} +echo ':' +echo -n "'" +listfolders "${FOLDERS[@]}" | sed -e "s/\x0/' '/g" -e "s,..$,," +echo "" echo ' to quit' read foo read -a SLEEPS <<< "0.1 0.5 1 2 3 4 5" +trap killtrap 9 15 -listfolders . | while read -r -d "" d; do +listfolders "${FOLDERS[@]}" | while read -r -d "" d; do printf "%s" $d tar cvvf "$d.tar" "$d" > "$d.tar.lst" & PID=$! @@ -35,6 +59,7 @@ listfolders . | while read -r -d "" d; do DUPID=$! while kill -0 "$PID" &>/dev/null; do [[ -f "$d.tar" ]] && fsize "$d.tar" "$DU" + [[ -f "$d.tar" ]] || { sleep 2; continue; } for i in ${SLEEPS[@]}; do sleep $i; kill -0 "$PID" &>/dev/null || break 2 printf . @@ -45,20 +70,24 @@ listfolders . | while read -r -d "" d; do kill -0 "$DUPID" &>/dev/null || kill "$DUPID" &>/dev/null echo '' done -[[ "$1" = "-n" ]] && { +trap - 9 15 +[[ "$NOCOMPRESSION" -eq 1 ]] && { exit } -[[ "$1" = "-z" ]] || { +[[ "$COMPRESSION" -eq 1 ]] || { echo 'Proceed to compress? to quit' read foo } echo 'Compressing..' read -a SLEEPS <<< "0.1 0.5 1 2 3 4 5" -listfolders . | while read -r -d "" d; do +trap killtrap 9 15 + +listfolders "${FOLDERS[@]}" | 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 + sleep 0.1 [[ -f "$d.tar.gz" ]] && fsize "$d.tar.gz" "$DU" for i in ${SLEEPS[@]}; do sleep $i; kill -0 "$PID" &>/dev/null || break 2