archive current folder files
This commit is contained in:
1
bin/archive-files
Symbolic link
1
bin/archive-files
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../files/archive-files
|
||||||
100
files/archive-files
Executable file
100
files/archive-files
Executable file
@@ -0,0 +1,100 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
VERSION="20190426"
|
||||||
|
|
||||||
|
function helpexit() {
|
||||||
|
BS=$( basename "$0" )
|
||||||
|
echo "Archive the files of the current directory, version: $VERSION"
|
||||||
|
echo "Requires tar, pv and python"
|
||||||
|
echo "Usage: $BS [-z/-n/--rm]"
|
||||||
|
echo " -z Compress."
|
||||||
|
echo " -n No compression. [default]"
|
||||||
|
echo " --rm Remove source folders after archival."
|
||||||
|
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
function listfiles() {
|
||||||
|
find "$@" -mindepth 1 -maxdepth 1 -type f | sort -V
|
||||||
|
}
|
||||||
|
function count_size() {
|
||||||
|
|
||||||
|
cat - | python -c "import sys
|
||||||
|
def sizeof_fmt(num, suffix='B'):
|
||||||
|
for unit in ['','K','M','G','T','P','E','Z']:
|
||||||
|
if num < 1024.0:
|
||||||
|
return '%3.1f %s%s' % (num, unit, suffix)
|
||||||
|
num /= 1024.0
|
||||||
|
return '%.1f %s%s' % (num, 'Y', suffix)
|
||||||
|
sum=0
|
||||||
|
try:
|
||||||
|
for line in sys.stdin:
|
||||||
|
sum += int(line)
|
||||||
|
sys.stderr.write('\r%s \r'%(sizeof_fmt(sum),))
|
||||||
|
sys.stderr.flush()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stderr.flush()
|
||||||
|
pass
|
||||||
|
print(sum)
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
function exitokay() {
|
||||||
|
[[ "$REMOVE" -eq 1 ]] && { exit; }
|
||||||
|
echo -ne "\n${G}If all looks okay, delete source folders with: ${Z}# rm -r "
|
||||||
|
for folder in "${REALFILES[@]}"; do echo -n "'$folder' "; done
|
||||||
|
echo ''
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
_qCol(){ true; } # incase qolop missing
|
||||||
|
. qolop &>/dev/null
|
||||||
|
Z=$( _qCol z ) #reset color
|
||||||
|
S=$( _qCol S ) #Bold
|
||||||
|
R=$( _qCol z R ) #Red
|
||||||
|
G=$( _qCol z g ) #green
|
||||||
|
Y=$( _qCol z Y ) #Yellow
|
||||||
|
|
||||||
|
NOCOMPRESSION=1
|
||||||
|
COMPRESSION=0
|
||||||
|
SUFFIX=tar
|
||||||
|
REMOVE=0
|
||||||
|
for ((i=1; i<=${#@}; i++)) {
|
||||||
|
[[ "${!i}" = "-h" ]] && helpexit
|
||||||
|
[[ "${!i}" = "--help" ]] && helpexit
|
||||||
|
[[ "${!i}" = "-z" ]] && { COMPRESSION=1; NOCOMPRESSION=0; COMPRESSCMD="| gzip"; SUFFIX=tgz; continue; }
|
||||||
|
[[ "${!i}" = "--rm" ]] && { REMOVE=1; continue; }
|
||||||
|
[[ "${!i}" = "-"* ]] && helpexit
|
||||||
|
}
|
||||||
|
archive_name=$( basename $( pwd ) )".$SUFFIX"
|
||||||
|
if [[ -f "$archive_name" ]]; then
|
||||||
|
echo Archive $archive_name already exist
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export IFS=$'\n'
|
||||||
|
REALFILES=( $( listfiles . ) )
|
||||||
|
[[ "$REMOVE" -eq 1 ]] && echo 'Source files will be deleted!'
|
||||||
|
echo -n $S"Archive the following files to '$archive_name' "
|
||||||
|
[[ "$NOCOMPRESSION" -eq 1 ]] && {
|
||||||
|
echo -n without compression;
|
||||||
|
} || {
|
||||||
|
[[ "$COMPRESSION" -eq 1 ]] && echo -n with gzip compression
|
||||||
|
}
|
||||||
|
echo $Z
|
||||||
|
for file in "${REALFILES[@]}"; do echo "'$file'"; done
|
||||||
|
printf "$S<ctrl-c> to quit$Z\n"
|
||||||
|
read foo
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
SIZE=$( find "${REALFILES[@]}" -type f -printf %s"\n" | count_size )
|
||||||
|
tar c "${REALFILES[@]}" | \
|
||||||
|
eval pv -s "$SIZE" $COMPRESSCMD > "$archive_name" && {
|
||||||
|
# tar exists okay
|
||||||
|
if [ "$REMOVE" -eq 1 ]; then
|
||||||
|
printf "${Y}Removing files $d$Z\n"
|
||||||
|
#which rm-progress &> /dev/null && rm-progress -f "${REALFILES[@]}"
|
||||||
|
rm -f "${REALFILES[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
exitokay
|
||||||
Reference in New Issue
Block a user