okay, i had to develop it even more
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user