Skip to content

Commit

Permalink
.functions: Improve targz
Browse files Browse the repository at this point in the history
* Only use `zopfli` when it’s available and if the `.tar` file is smaller than 50 MB.
* Use `pigz` instead of `gzip` when it’s available.
* Always exclude `.DS_Store` files when creating a tarball.

Closes mathiasbynens#199.
  • Loading branch information
mathiasbynens committed May 1, 2013
1 parent f21a29c commit b53818f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 8 deletions.
2 changes: 2 additions & 0 deletions .brew
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,12 @@ brew install git
#brew install imagemagick
brew install lynx
brew install node
brew install pigz
brew install rename
brew install rhino
brew install tree
brew install webkit2png
brew install zopfli

brew tap homebrew/versions
brew install lua52
Expand Down
30 changes: 22 additions & 8 deletions .functions
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit b53818f

Please sign in to comment.