Skip to content

Archive Benchmark Scripts: Optimize Compression Efficiency

Explore default and maximal compression benchmarking scripts for various archive formats. Learn how to maximize compression efficiency and speed up your compression tasks with parallel compression techniques.


Default Compression Benchmarking Script for Various Formats
#!/bin/bash

# Define the source directory and file extensions
source_dir="$HOME/pictures"
extensions=(
  "zip"
  "zipx"
  "cbz"
  "tar"
  "tar.gz"
  "tar.bz2"
  "tar.xz"
  "tar.lzma"
  "tar.lz"
  "tgz"
  "tbz"
  "tbz2"
  "zst"
  "rar"
  "7z"
  "xz"
  "bz2"
  "gz"
  "z"
  "lz4"
  "lzma"
)

# Loop through each extension and create a compressed file
for ext in "${extensions[@]}"; do
  output_file="pictures.$ext"
  case "$ext" in
    "zip" | "zipx" | "cbz")
      zip -r "$output_file" "$source_dir"
      ;;
    "tar" | "tar.gz" | "tar.bz2" | "tar.xz" | "tar.lzma" | "tar.lz" | "tgz" | "tbz" | "tbz2" | "zst")
      tar -cf "$output_file" -C "$source_dir" .
      ;;
    "rar")
      rar a "$output_file" "$source_dir"
      ;;
    "7z")
      7z a "$output_file" "$source_dir"
      ;;
    "xz")
      xz "$source_dir" -c > "$output_file"
      ;;
    "bz2")
      tar -cjf "$output_file" -C "$source_dir" .
      ;;
    "gz")
      tar -czf "$output_file" -C "$source_dir" .
      ;;
    "z")
      tar -c "$source_dir" | gzip -n - > "$output_file"
      ;;
    "lz4")
      tar -c "$source_dir" | lz4 -9 - > "$output_file"
      ;;
    "lzma")
      tar -c "$source_dir" | lzma -9 - > "$output_file"
      ;;
    *)
      echo "Unsupported extension: $ext"
      ;;
  esac
done
Maximal Compression Benchmarking Script for Various Formats
#!/bin/bash

# Define the source directory
source_dir="$HOME/pictures"

# Create a function to create archives with maximum compression
create_archive() {
  local ext="$1"
  local output_file="pictures.$ext"
  case "$ext" in
    "zip" | "zipx" | "cbz")
      zip -r9 "$output_file" "$source_dir"
      ;;
    "tar" | "tar.gz" | "tar.bz2" | "tar.xz" | "tar.lzma" | "tar.lz" | "tgz" | "tbz" | "tbz2" | "zst")
      tar --use-compress-program=pigz -cf "$output_file" -C "$source_dir" .
      ;;
    "rar")
      rar a -m5 "$output_file" "$source_dir"
      ;;
    "7z")
      7z a -mx9 "$output_file" "$source_dir"
      ;;
    "xz")
      xz -9e "$source_dir" -c > "$output_file"
      ;;
    "bz2")
      tar --use-compress-program=pbzip2 -cf "$output_file" -C "$source_dir" .
      ;;
    "gz")
      tar --use-compress-program=pigz -czf "$output_file" -C "$source_dir" .
      ;;
    "z")
      tar -c "$source_dir" | zstd -19 -T0 -o "$output_file"
      ;;
    "lz4")
      tar -c "$source_dir" | lz4 -9 - > "$output_file"
      ;;
    "lzma")
      tar -c "$source_dir" | lzma -9 - > "$output_file"
      ;;
    *)
      echo "Unsupported extension: $ext"
      ;;
  esac
}

# Loop through each extension and create a compressed file
for ext in "${extensions[@]}"; do
  create_archive "$ext"
done
Example: Parallel compressing
#!/bin/bash

source_dir="$HOME/pictures"
num_jobs=$(($(nproc) + 1))

compress_file() {
  local file="$1"
  local ext="$2"
  local output_file="${file%.*}.$ext"
  case "$ext" in
    "gz")
      gzip -c "$file" > "$output_file"
      ;;
    "bz2")
      bzip2 -c "$file" > "$output_file"
      ;;
    "xz")
      xz -c "$file" > "$output_file"
      ;;
    "zst")
      zstd -c "$file" > "$output_file"
      ;;
    "lz4")
      lz4 -9 -k "$file" "$output_file"
      ;;
    "lzma")
      lzma -9 -k "$file" "$output_file"
      ;;
    "rar")
      rar a -m5 "$output_file" "$file"
      ;;
    "7z")
      7z a -mx9 "$output_file" "$file"
      ;;
    "zip")
      zip -r9 "$output_file" "$file"
      ;;
    "zipx")
      zip -r9 "$output_file" "$file"
      ;;
    "cbz")
      zip -r9 "$output_file" "$file"
      ;;
    # Add other cases as needed
    *)
      echo "Unsupported extension: $ext"
      ;;
  esac
}

export -f compress_file
export source_dir

extensions=("gz" "bz2" "xz" "zst" "lz4" "lzma" "rar" "7z" "zip" "zipx" "cbz" /* other extensions */)
for ext in "${extensions[@]}"; do
  find "$source_dir" -type f -print0 | xargs -0 -n 1 -P "$num_jobs" -I {} bash -c 'compress_file "$@"' _ {} "$ext"
done