67 lines
1.5 KiB
Bash
Executable File
67 lines
1.5 KiB
Bash
Executable File
#!/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 '<ctrl-c> 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? <ctrl-c> 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
|
|
|