diff options
Diffstat (limited to '.functions')
-rw-r--r-- | .functions | 30 |
1 files changed, 22 insertions, 8 deletions
@@ -26,18 +26,32 @@ function cdf() { # short for `cdfinder` cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')" } -# Create a .tar.gz archive, using `zopfli` or `gzip` for compression +# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression function targz() { - if zopfli > /dev/null 2>&1; then + local tmpFile="${@}.tar" + tar -cvf "${tmpFile}" --exclude=".DS_Store" "${@}" || return 1 + + size=$( + stat -f"%z" "${tmpFile}" 2> /dev/null; # OS X `stat` + stat -c"%s" "${tmpFile}" 2> /dev/null # GNU `stat` + ) + + local cmd="" + if (( size < 52428800 )) && hash zopfli 2> /dev/null; then + # the .tar file is smaller than 50 MB and Zopfli is available; use it cmd="zopfli" else - cmd="gzip" + if hash pigz 2> /dev/null; then + cmd="pigz" + else + cmd="gzip" + fi fi - local tmpFile="${1}.tar" - tar -cvf "${tmpFile}" "${1}" && - "${cmd}" "${tmpFile}" && - rm "${tmpFile}" 2> /dev/null && - echo "${tmpFile}.gz created successfully (compressed using \`${cmd}\`)." + + echo "Compressing .tar using \`${cmd}\`…" + "${cmd}" -v "${tmpFile}" || return 1 + [ -f "${tmpFile}" ] && rm "${tmpFile}" + echo "${tmpFile}.gz created successfully." } # Determine size of a file or total size of a directory |