#!/bin/bash # # Recursively compress any files greater than a supplied MINSIZE (-s), starting # from the supplied DIRECTORY (-d). # error() { echo "Error: $1" exit 1 } usage() { echo "Usage: $0 Where include: -d DIRECTORY - Specify directory to recurse -s MINSIZE - Minimum file size in MiB to compress -n - Don't make changes, just display " exit 1 } # Initialize variables COMPRESS_SUFFIX=".gz" COMPRESS_CMD="gzip -v --suffix ${COMPRESS_SUFFIX}" # Process cmdline arguments DRYRUN=0 MINSIZE="" COMPRESS_DIR="" while getopts "ns:d:h" options; do case $options in n ) DRYRUN=1 ;; s ) MINSIZE=$OPTARG ;; d ) COMPRESS_DIR=$OPTARG ;; \?|h ) usage ;; * ) usage ;; esac done # Validate input test -z "${COMPRESS_DIR}" && error "Missing -d argument" test -z "${MINSIZE}" && error "Missing -s argument" # Find files to compress using the supplied arguments find "${COMPRESS_DIR}" -type f -not -name "*${COMPRESS_SUFFIX}" -size +"${MINSIZE}"M | while read line do if [ ${DRYRUN} -eq 1 ]; then echo "\$ ${COMPRESS_CMD} ${line}" echo "\$ ln -s $(basename $line).gz ${line}" else ${COMPRESS_CMD} ${line} # Create symlink to original file ln -s $(basename $line).gz ${line} fi done