okay, i had to develop it even more

This commit is contained in:
q
2016-02-16 22:11:52 +02:00
parent 78493298a7
commit 82833bff40

View File

@@ -2,32 +2,56 @@
function helpexit() { function helpexit() {
BS=$( basename "$0" )
echo Archive the subfolders of the current directory echo Archive the subfolders of the current directory
echo " -z Compress. If not passed, will ask after tar archive" echo "Usage: $BS [-z/-n] [folder name(s)]"
echo " -n No compression. Exit after tar archive" 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 exit
} }
function listfolders() { 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() { function fsize() {
echo -en "\e[2K\r" echo -en "\e[2K\r"
[[ -z "$2" ]] || printf "%s -> " "$2" [[ -z "$2" ]] || printf "%s -> " "$2"
printf "%s %s" "$( timeout 1 fastdu -h "$1" )" "$1" 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 'Existing files will be overwritten!'
echo Archive the following folders: echo -n "Archive the following folders "
[[ "$NOCOMPRESSION" -eq 1 ]] && {
listfolders . | tr "[:cntrl:]" " " echo -n without compression;
echo '' } || {
[[ "$COMPRESSION" -eq 1 ]] && echo -n with gzip compression
}
echo ':'
echo -n "'"
listfolders "${FOLDERS[@]}" | sed -e "s/\x0/' '/g" -e "s,..$,,"
echo ""
echo '<ctrl-c> to quit' echo '<ctrl-c> to quit'
read foo read foo
read -a SLEEPS <<< "0.1 0.5 1 2 3 4 5" 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 printf "%s" $d
tar cvvf "$d.tar" "$d" > "$d.tar.lst" & tar cvvf "$d.tar" "$d" > "$d.tar.lst" &
PID=$! PID=$!
@@ -35,6 +59,7 @@ listfolders . | while read -r -d "" d; do
DUPID=$! DUPID=$!
while kill -0 "$PID" &>/dev/null; do while kill -0 "$PID" &>/dev/null; do
[[ -f "$d.tar" ]] && fsize "$d.tar" "$DU" [[ -f "$d.tar" ]] && fsize "$d.tar" "$DU"
[[ -f "$d.tar" ]] || { sleep 2; continue; }
for i in ${SLEEPS[@]}; do for i in ${SLEEPS[@]}; do
sleep $i; kill -0 "$PID" &>/dev/null || break 2 sleep $i; kill -0 "$PID" &>/dev/null || break 2
printf . printf .
@@ -45,20 +70,24 @@ listfolders . | while read -r -d "" d; do
kill -0 "$DUPID" &>/dev/null || kill "$DUPID" &>/dev/null kill -0 "$DUPID" &>/dev/null || kill "$DUPID" &>/dev/null
echo '' echo ''
done done
[[ "$1" = "-n" ]] && { trap - 9 15
[[ "$NOCOMPRESSION" -eq 1 ]] && {
exit exit
} }
[[ "$1" = "-z" ]] || { [[ "$COMPRESSION" -eq 1 ]] || {
echo 'Proceed to compress? <ctrl-c> to quit' echo 'Proceed to compress? <ctrl-c> to quit'
read foo read foo
} }
echo 'Compressing..' echo 'Compressing..'
read -a SLEEPS <<< "0.1 0.5 1 2 3 4 5" 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" ) DU=$( fastdu -h "$d.tar" )
gzip -f "$d.tar" & gzip -f "$d.tar" &
PID=$! PID=$!
while kill -0 "$PID" >/dev/null 2>&1; do while kill -0 "$PID" >/dev/null 2>&1; do
sleep 0.1
[[ -f "$d.tar.gz" ]] && fsize "$d.tar.gz" "$DU" [[ -f "$d.tar.gz" ]] && fsize "$d.tar.gz" "$DU"
for i in ${SLEEPS[@]}; do for i in ${SLEEPS[@]}; do
sleep $i; kill -0 "$PID" &>/dev/null || break 2 sleep $i; kill -0 "$PID" &>/dev/null || break 2