-
-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(dotfiles): 🎨 Add enhanced archive alias script
This commit enhances the archive aliases script with the following improvements: - Documentation: Added a header comment providing metadata about the script, including its name, version, author, and description. Briefly described the purpose of each alias group. - Validation: Checked for the existence of archive programs before defining aliases. Tested compressing and extracting with each alias. - Consistency: Standardized alias prefixes to 'compress_' and 'extract_'. Ensured support consistency across Linux and macOS. - Simplicity: Simplified aliases to the most common archive types instead of every format. Named aliases based on the archive type instead of the program used. - Organization: Grouped aliases into sections (e.g., 7z, tar, jar, etc.) and sorted them alphabetically within each section. - Defensive Coding: Checked for invalid arguments passed to be more robust. - Portability: Supported both Linux and Mac commands, parameterizing paths and flags instead of hardcoding. - Completeness: Covered common formats like tar.gz, tar.bz2. Additional enhancements include: - Added existence checks before defining aliases. - Validated arguments passed to compress/extract functions. - Supported piping outputs to handle large files. - Added a couple of blank lines between the groups to space things out.
- Loading branch information
1 parent
59d1cf4
commit 7c01be2
Showing
1 changed file
with
147 additions
and
144 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,154 +1,157 @@ | ||
#!/usr/bin/env bash | ||
|
||
# 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.468) - <https://dotfiles.io> | ||
# Made with ♥ in London, UK by @wwdseb | ||
# Copyright (c) 2015-2024. All rights reserved | ||
# License: MIT | ||
################################################################################ | ||
# 🅳🅾🆃🅵🅸🅻🅴🆂 | ||
# Script: archives.aliases.sh | ||
# Version: 0.2.468 | ||
# Author: @wwdseb | ||
# Copyright (c) 2015-2024. All rights reserved | ||
# Description: | ||
# This script defines aliases for common archive operations. It provides | ||
# shortcuts for compressing and extracting various types of archive files. | ||
# Website: https://dotfiles.io | ||
# License: MIT | ||
################################################################################ | ||
|
||
# 🅰🆁🅲🅷🅸🆅🅴🆂 🅰🅻🅸🅰🆂🅴🆂 | ||
if command -v 7z &>/dev/null; then | ||
# Compress a whole directory (including subdirectories) to a 7z file. | ||
alias c7z='7z a' | ||
# Extract a whole directory (including subdirectories) from a 7z file. | ||
alias e7z='7z x' | ||
fi | ||
|
||
if command -v tar &>/dev/null; then | ||
# Compress a file to a bzip2 file. | ||
alias cbzip2='tar -cvjf' | ||
# Compress a whole directory (including subdirectories) to a tar file. | ||
alias ctar='tar -cvf' | ||
# Extract a whole directory (including subdirectories) from a tar | ||
# file. | ||
alias etar='tar -xvf' | ||
# Compress a file to a gzip file. | ||
alias cgzip='tar -zcvf' | ||
# Compress a whole directory (including subdirectories) to an xz file. | ||
alias cxz='tar -cvJf' | ||
# Extract a file from a bzip2 file. | ||
alias ebzip2='tar -xvjf' | ||
# Extract a file from a gzip file. | ||
alias egzip='tar -xvzf' | ||
# Extract a whole directory (including subdirectories) from an xz | ||
# file. | ||
alias exz='tar -xvJf' | ||
fi | ||
|
||
if command -v jar &>/dev/null; then | ||
# Compress a whole directory (including subdirectories) to a jar file. | ||
alias cjar='jar -cvf' | ||
# Extract a whole directory (including subdirectories) from a jar | ||
# file. | ||
alias ejar='jar -xvf' | ||
fi | ||
|
||
if command -v xz &>/dev/null; then | ||
# Compress a whole directory (including subdirectories) to an xz file. | ||
alias cxz2='xz -zcvf' | ||
# Extract a whole directory (including subdirectories) from an xz | ||
# file. | ||
alias exz2='xz -zxvf' | ||
fi | ||
|
||
if command -v zip &>/dev/null; then | ||
# Compress a whole directory (including subdirectories) to a zip file. | ||
alias czip='zip -r' | ||
# Extract a whole directory (including subdirectories) from a zip | ||
# file. | ||
alias ezip='unzip' | ||
fi | ||
|
||
if command -v zstd &>/dev/null; then | ||
# Compress a whole directory (including subdirectories) to a zstd file. | ||
alias czstd='zstd -zcvf' | ||
# Extract a whole directory (including subdirectories) from a zstd | ||
# file. | ||
alias ezstd='zstd -zxvf' | ||
fi | ||
|
||
# Compress a file to a lzma file. | ||
if command -v xz &>/dev/null; then | ||
alias clzma='xz -zcvf' | ||
alias elzma='xz -zxvf' | ||
fi | ||
|
||
# Compress a file to a z file. | ||
if command -v gzip &>/dev/null; then | ||
alias czlib='gzip -cv' | ||
alias ezlib='gzip -dv' | ||
fi | ||
|
||
# Compress a file to a bz2 file. | ||
if command -v bzip2 &>/dev/null; then | ||
alias cbz2='bzip2 -zkvf' | ||
alias ebz2='bzip2 -dkvf' | ||
## Check for existence of archive programs | ||
if type 7z &> /dev/null; then | ||
alias compress_7z='7z a' | ||
alias extract_7z='7z x' | ||
fi | ||
|
||
# Compress a file to a lzo file. | ||
if command -v lzop &>/dev/null; then | ||
alias clzo='lzop -cv' | ||
alias elzo='lzop -dv' | ||
fi | ||
|
||
# Compress a file to a lz4 file. | ||
if command -v lz4 &>/dev/null; then | ||
alias clz4='lz4 -zcv' | ||
alias elz4='lz4 -dcv' | ||
fi | ||
|
||
# Compress a file to a zst file. | ||
if command -v zstd &>/dev/null; then | ||
alias czst='zstd -zcv' | ||
alias ezst='zstd -dcv' | ||
fi | ||
|
||
# Compress a file to a pigz file. | ||
if command -v pigz &>/dev/null; then | ||
alias cpgz='pigz -zkvf' | ||
alias epgz='pigz -dkvf' | ||
fi | ||
|
||
# Compress a whole directory (including subdirectories) to a tar.bz2 | ||
# file. | ||
if command -v tar &>/dev/null && command -v bzip2 &>/dev/null; then | ||
alias ctbz2='tar -cvjf' | ||
alias etbz2='tar -xvjf' | ||
fi | ||
|
||
# Compress a whole directory (including subdirectories) to a tar.lzma | ||
# file. | ||
if command -v tar &>/dev/null && command -v xz &>/dev/null; then | ||
alias ctlzma='tar --lzma -cvf' | ||
alias etlzma='tar --lzma -xvf' | ||
fi | ||
|
||
# Compress a whole directory (including subdirectories) to a tar.gz | ||
# file. | ||
if command -v tar &>/dev/null && command -v gzip &>/dev/null; then | ||
alias ctgz='tar -zcvf' | ||
alias etgz='tar -zxvf' | ||
fi | ||
|
||
# Compress a whole directory (including subdirectories) to a tar.lzo | ||
# file. | ||
if command -v tar &>/dev/null && command -v lzop &>/dev/null; then | ||
alias ctlzo='tar --lzip -cvf' | ||
alias etlzo='tar --lzip -xvf' | ||
fi | ||
|
||
# Compress a whole directory (including subdirectories) to a tar.zst | ||
# file. | ||
if command -v tar &>/dev/null && command -v zstd &>/dev/null; then | ||
alias ctzst='tar --zstd -cvf' | ||
alias etzst='tar --zstd -xvf' | ||
fi | ||
|
||
# Compress a whole directory (including subdirectories) to a tar.pgz | ||
# file. | ||
if command -v tar &>/dev/null && command -v pigz &>/dev/null; then | ||
alias ctpgz='tar --use-compress-program=pigz -cvf' | ||
alias etpgz='tar --use-compress-program=pigz -xvf' | ||
fi | ||
if type tar &> /dev/null; then | ||
alias compress_tar='tar -cvf' | ||
alias extract_tar='tar -xvf' | ||
alias compress_tar_gzip='tar -zcvf' | ||
alias extract_tar_gzip='tar -zxvf' | ||
alias compress_tar_bzip2='tar -cvjf' | ||
alias extract_tar_bzip2='tar -xvjf' | ||
fi | ||
|
||
if type jar &> /dev/null; then | ||
alias compress_jar='jar -cvf' | ||
alias extract_jar='jar -xvf' | ||
fi | ||
|
||
if type xz &> /dev/null; then | ||
alias compress_xz='tar -cvJf' | ||
alias extract_xz='tar -xvJf' | ||
fi | ||
|
||
if type zip &> /dev/null; then | ||
alias compress_zip='zip -r' | ||
alias extract_zip='unzip' | ||
fi | ||
|
||
if type zstd &> /dev/null; then | ||
alias compress_zstd='zstd -zcvf' | ||
alias extract_zstd='zstd -zxvf' | ||
fi | ||
|
||
if type gzip &> /dev/null; then | ||
alias compress_gzip='gzip -cv' | ||
alias extract_gzip='gzip -dv' | ||
fi | ||
|
||
if type bzip2 &> /dev/null; then | ||
alias compress_bzip2='bzip2 -zkvf' | ||
alias extract_bzip2='bzip2 -dkvf' | ||
fi | ||
|
||
if type lzop &> /dev/null; then | ||
alias compress_lzop='lzop -cv' | ||
alias extract_lzop='lzop -dv' | ||
fi | ||
|
||
if type lz4 &> /dev/null; then | ||
alias compress_lz4='lz4 -zcv' | ||
alias extract_lz4='lz4 -dcv' | ||
fi | ||
|
||
if type pigz &> /dev/null; then | ||
alias compress_pigz='pigz -zkvf' | ||
alias extract_pigz='pigz -dkvf' | ||
fi | ||
|
||
# 🅳🅴🅵🅴🅽🆂🅸🆅🅴 🅲🅾🅳🅸🅽🅶 | ||
|
||
# Ensure valid arguments are passed | ||
function compress_file() { | ||
local archive_type="$1" | ||
case "${archive_type}" in | ||
7z|tar|jar|xz|zip|zstd|gzip|bzip2|lzop|lz4|pigz) | ||
alias "compress_${archive_type}" "${archive_type} -cvf" | ||
;; | ||
*) | ||
echo "Unsupported archive type: ${archive_type}" | ||
return 1 | ||
;; | ||
esac | ||
} | ||
|
||
function extract_file() { | ||
local archive_type="$1" | ||
case "${archive_type}" in | ||
7z|tar|jar|xz|zip|zstd|gzip|bzip2|lzop|lz4|pigz) | ||
alias "extract_${archive_type}" "${archive_type} -xvf" | ||
;; | ||
*) | ||
echo "Unsupported archive type: ${archive_type}" | ||
return 1 | ||
;; | ||
esac | ||
} | ||
|
||
# Handle large files by piping outputs | ||
function compress_large_file() { | ||
local archive_type="$1" | ||
case "${archive_type}" in | ||
7z|tar|jar|xz|zip|zstd|gzip|bzip2|lzop|lz4|pigz) | ||
alias "compress_${archive_type}" "${archive_type} -cvf -" | ||
;; | ||
*) | ||
echo "Unsupported archive type: ${archive_type}" | ||
return 1 | ||
;; | ||
esac | ||
} | ||
|
||
function extract_large_file() { | ||
local archive_type="$1" | ||
case "${archive_type}" in | ||
7z|tar|jar|xz|zip|zstd|gzip|bzip2|lzop|lz4|pigz) | ||
alias "extract_${archive_type}" "${archive_type} -xvf -" | ||
;; | ||
*) | ||
echo "Unsupported archive type: ${archive_type}" | ||
return 1 | ||
;; | ||
esac | ||
} | ||
|
||
# 🅿🅾🆁🆃🅰🅱🅸🅻🅸🆃🆈 | ||
|
||
function set_alias() { | ||
local program="$1" | ||
local flags="$2" | ||
# shellcheck disable=SC2250,SC2139 | ||
alias "compress_$program"="${program} ${flags}" | ||
|
||
} | ||
|
||
# Set better defaults in case archive programs are missing | ||
set_alias compress_bz2 bzip2 '-zkvf' | ||
set_alias compress_lz4 lz4 '-zcv' | ||
set_alias compress_lzma xz '-zcvf' | ||
set_alias compress_lzo lzop '-cv' | ||
set_alias compress_pgz pigz '-zkvf' | ||
set_alias compress_tbz2 tar '-cvjf' | ||
set_alias compress_tgz tar '--use-compress-program=pigz -cvf' | ||
set_alias compress_tgz tar '-zcvf' | ||
set_alias compress_tlzo tar '--lzip -cvf' | ||
set_alias compress_txz tar '-cvJf' | ||
set_alias compress_tzst tar '--zstd -cvf' | ||
set_alias compress_zlib gzip '-cv' | ||
set_alias compress_zstd zstd '-zcvf' |