This commit is contained in:
PedoDeveloper -
commit 4748def178

View file

@ -32,7 +32,10 @@ calc_smart_volumes() {
total_size=$(du -s -BM "${input_file}" | grep -oP '^\d+') || return 1 total_size=$(du -s -BM "${input_file}" | grep -oP '^\d+') || return 1
# If total file size is smaller than volume size, don't pack it into volumes # If total file size is smaller than volume size, don't pack it into volumes
(( total_size < size )) && return 1 if (( total_size < size)); then
log "WARN" "$input_file is smaller than ${size}MB, skipping volumes"
return 1
fi
num_volumes=$(( (total_size + size - 1) / size )) num_volumes=$(( (total_size + size - 1) / size ))
smart_size=$(( (total_size + num_volumes - 1) / num_volumes )) smart_size=$(( (total_size + num_volumes - 1) / num_volumes ))
@ -46,21 +49,26 @@ get_volumes() {
local input_file="$1" local input_file="$1"
local size="${2:-}" local size="${2:-}"
local volumes="" local volumes=""
local smart_size local smart_size=""
if [[ -n "$size" ]]; then if [[ -n "$size" ]]; then
log "INFO" "Volumes size is set to ${size}MB" log "INFO" "Volumes size is set to ${size}MB"
smart_size="$(calc_smart_volumes "$input_file" "$size" || echo -n)" smart_size="$(calc_smart_volumes "$input_file" "$size" || true)"
volumes="-v${smart_size}m"
fi fi
[[ -n "$volumes" ]] && log "INFO" "Volumes set to '$volumes'" || log "INFO" "Volumes argument unset" if [[ -n "$smart_size" ]]; then
volumes="-v${smart_size}m"
log "INFO" "Volumes set to '$volumes'"
else
log "INFO" "Volumes argument unset"
fi
echo "$volumes" echo "$volumes"
} }
generate_name() { generate_name() {
# Generates a random archive name of 20 alphanumeric characters # Generates a random archive name of 20 alphanumeric characters
local archive_dir="$1"
local archive_name local archive_name
archive_name="$archive_dir/$(tr -dc '[:alnum:]' < /dev/urandom | head -c 20).7z" archive_name="$archive_dir/$(tr -dc '[:alnum:]' < /dev/urandom | head -c 20).7z"
@ -73,8 +81,7 @@ create_archive() {
local input_file="$1" local input_file="$1"
local password="$2" local password="$2"
local volumes="$3" local volumes="$3"
local size="$4" local archive_name="$4"
local archive_name="$5"
7z a -mhe=on "-p${password}" "$volumes" "$archive_name" "${input_file}" 7z a -mhe=on "-p${password}" "$volumes" "$archive_name" "${input_file}"
} }
@ -84,25 +91,23 @@ main() {
local password="${2:-}" local password="${2:-}"
local size="${3:-}" local size="${3:-}"
local volumes archive_name archive_dir local volumes archive_name archive_dir
archive_dir="$(dirname "$0")/../archives"
check_dependencies "7z" check_dependencies "7z"
check_input "$input_file" "$password" "$size" check_input "$input_file" "$password" "$size"
mkdir -p "$archive_dir" || { log "ERROR" "Unable to create archive directory"; exit 1; } archive_dir="$(dirname "$0")/../archives"
mkdir -p "$archive_dir"
archive_name="$(generate_name "$archive_dir")"
volumes="$(get_volumes "$input_file" "$size")" volumes="$(get_volumes "$input_file" "$size")"
archive_name="$(generate_name)"
trap 'cleanup "$archive_name"' ERR INT
log "INFO" "Packing '${input_file}' into archive '$archive_name' with password '${password}'" log "INFO" "Packing '${input_file}' into archive '$archive_name' with password '${password}'"
trap 'cleanup "$archive_name"' ERR INT
create_archive \ create_archive \
"$input_file" \ "$input_file" \
"$password" \ "$password" \
"$volumes" \ "$volumes" \
"$size" \
"$archive_name" "$archive_name"
log "NOTICE" "Archive created" log "NOTICE" "Archive created"