#!/bin/bash archive_dir="$(dirname "$0")/../archives" input_file="${1}" archive_pwd="${2}" size="$3" check_dependencies() { if ! mkdir -p "$archive_dir"; then echo "ERROR: Unable to create archive directory" exit 1 fi if ! command -v 7z 2>&1 >/dev/null; then echo "ERROR: 7z must be installed" exit 1 fi } check_input() { if [[ ! -e "${input_file}" ]]; then echo "ERROR: Input file '${input_file}' does not exist" exit 2 fi echo "Archiving file/directory '${input_file}'" >&2 } set_volumes() { volumes= if [[ "$size" =~ ^[1-9][0-9]*$ ]]; then volumes="-v${size}m" elif [[ -n "$size" ]]; then echo "Invalid size $size, must be a number" exit 2 fi echo "Volumes set to '$volumes'" >&2 } generate_name() { archive="$archive_dir/$(base64 /dev/urandom | tr -dc [:alnum:] | head -c 20).7z" echo "Generated archive name $archive" >&2 } create_archive() { echo "Packing ${input_file} into archive $archive with password ${archive_pwd}" [[ -n "$volumes" ]] && echo "and volumes of size $size MB" 7z a -mhe=on "-p${archive_pwd}" "$volumes" "$archive" "${input_file}" >&2 } check_dependencies check_input set_volumes generate_name create_archive