_files=( mysql-01.sql mysql-02.sql mysql-03.sql json-01.json json-02.json bgp-mrt.tsv ) _methods=( gzip:1 gzip:3 gzip:6 gzip:9 bzip2:1 bzip2:3 bzip2:6 bzip2:9 zstd:1 zstd:3 zstd:6 zstd:9 lzip:0 lzip:1 lzip:3 lzip:6 lzip:9 xz:0 xz:1 xz:3 xz:6 xz:9 ) ( set -e -E -u -o pipefail for _file in "${_files[@]}" ; do for _method_0 in "${_methods[@]}" ; do _method="${_method_0%%:*}" _level="${_method_0#*:}" case "${_method}" in ( gzip ) _compressor=( gzip -"${_level}" --rsyncable ) ; _extension=gzip ;; ( bzip2 ) _compressor=( bzip2 -z -"${_level}" ) ; _extension=bz2 ;; ( zstd ) _compressor=( zstd -z -"${_level}" -q --rsyncable --threads=1 ) ; _extension=zst ;; ( lzip ) _compressor=( lzip -"${_level}" -b 1048576 ) ; _extension=lz ;; ( xz ) _compressor=( xz -z -"${_level}" -q -F xz -C sha256 -T 1 ) ; _extension=xz ;; esac printf -- '[ii] compressing `%s` with `%s` / `%s`...\n' "${_file}" "${_method}" "${_level}" >&2 mkdir -p -- "${_file}--${_method}" /usr/bin/time \ -o "${_file}--${_method}/${_file}--${_method}-${_level}.log" \ -f '(( elapsed: %E (user: %U, kernel: %S), CPU: %P, memory: %M (faults: %F, swapped: %W), I/O: %I / %O (waits: %w) ))' \ -- \ "${_compressor[@]}" \ < "${_file}" \ >| "${_file}--${_method}/${_file}--${_method}-${_level}.${_extension}" \ # sleep -- 1s done done ) ( set -e -E -u -o pipefail printf -- 'method' for _file in "${_files[@]}" ; do printf '\t%s\t\t\t' "${_file}" done printf -- '\n' for _method_0 in none "${_methods[@]}" ; do _method="${_method_0%%:*}" _level="${_method_0#*:}" case "${_method}" in ( none ) ;; ( gzip ) _extension=gzip ;; ( bzip2 ) _extension=bz2 ;; ( zstd ) _extension=zst ;; ( lzip ) _extension=lz ;; ( xz ) _extension=xz ;; esac printf -- '%s' "${_method_0}" for _file in "${_files[@]}" ; do if test "${_method_0}" != none ; then _size="$( du --summarize --apparent-size --block-size 1048576 -- "${_file}--${_method}/${_file}--${_method}-${_level}.${_extension}" \ | cut -f 1 -d $'\t' )" _time="$( cat "${_file}--${_method}/${_file}--${_method}-${_level}.log" \ | sed -r -e 's#\(\( elapsed: ([^ ]+) \(user: ([^ ]+), kernel: ([^ ]+)\), CPU: [^ ]+%, memory: ([^ ]+) \(faults: ([^ ]+), swapped: [^ ]+\), I/O: ([^ ]+) / ([^ ]+) \(waits: ([^ ]+)\) \)\)#\2\t\3\t\4#' )" else _size="$( du --summarize --apparent-size --block-size 1048576 -- "${_file}" \ | cut -f 1 -d $'\t' )" _time=$'-\t-\t-' fi printf -- '\t%s\t%s' "${_size}" "${_time}" done printf -- '\n' done )