mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-18 11:50:07 +00:00
feat(plugins): add universalarchive
plugin to conveniently compress files (#6846)
Co-authored-by: Marc Cornellà <marc.cornella@live.com>
This commit is contained in:
parent
2118d35e01
commit
492f712df2
3 changed files with 122 additions and 0 deletions
46
plugins/universalarchive/README.md
Normal file
46
plugins/universalarchive/README.md
Normal file
|
@ -0,0 +1,46 @@
|
|||
# universalarchive plugin
|
||||
|
||||
Lets you compress files by a command `ua <format> <files>`, supporting various
|
||||
compression formats (e.g. 7z, tar.gz, lzma, ...).
|
||||
|
||||
To enable it, add `universalarchive` to the plugins array in your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... universalarchive)
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Run `ua <format> <files>` to compress `<files>` into an archive file using `<format>`.
|
||||
For example:
|
||||
|
||||
```sh
|
||||
ua xz *.html
|
||||
```
|
||||
|
||||
this command will compress all `.html` files in directory `folder` into `folder.xz`.
|
||||
|
||||
This plugin saves you from having to remember which command line arguments compress a file.
|
||||
|
||||
## Supported compression formats
|
||||
|
||||
| Extension | Description |
|
||||
|:-----------------|:-------------------------------|
|
||||
| `7z` | 7zip file |
|
||||
| `bz2` | Bzip2 file |
|
||||
| `gz` | Gzip file |
|
||||
| `lzma` | LZMA archive |
|
||||
| `lzo` | LZO archive |
|
||||
| `rar` | WinRAR archive |
|
||||
| `tar` | Tarball |
|
||||
| `tbz`/`tar.bz2` | Tarball with bzip2 compression |
|
||||
| `tgz`/`tar.gz` | Tarball with gzip compression |
|
||||
| `tlz`/`tar.lzma` | Tarball with lzma compression |
|
||||
| `txz`/`tar.xz` | Tarball with lzma2 compression |
|
||||
| `tZ`/`tar.Z` | Tarball with LZW compression |
|
||||
| `xz` | LZMA2 archive |
|
||||
| `Z` | Z archive (LZW) |
|
||||
| `zip` | Zip archive |
|
||||
| `zst` | Zstd archive |
|
||||
|
||||
See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information regarding the archive formats.
|
6
plugins/universalarchive/_universalarchive
Normal file
6
plugins/universalarchive/_universalarchive
Normal file
|
@ -0,0 +1,6 @@
|
|||
#compdef ua
|
||||
|
||||
_arguments \
|
||||
"1:archive format:(7z bz2 gz lzma lzo rar tar tar.bz2 tar.gz tar.lzma tar.xz tar.Z tbz tgz tlz txz tZ xz Z zip zst)" \
|
||||
"*:input files:_files" \
|
||||
&& return 0
|
70
plugins/universalarchive/universalarchive.plugin.zsh
Normal file
70
plugins/universalarchive/universalarchive.plugin.zsh
Normal file
|
@ -0,0 +1,70 @@
|
|||
function ua() {
|
||||
local usage=\
|
||||
"Archive files and directories using a given compression algorithm.
|
||||
|
||||
Usage: $0 <format> <files>
|
||||
Example: $0 tbz PKGBUILD
|
||||
|
||||
Supported archive formats are:
|
||||
7z, bz2, gz, lzma, lzo, rar, tar, tbz (tar.bz2), tgz (tar.gz),
|
||||
tlz (tar.lzma), txz (tar.xz), tZ (tar.Z), xz, Z, zip, and zst."
|
||||
|
||||
if [[ $# -lt 2 ]]; then
|
||||
echo >&2 "$usage"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ext="$1"
|
||||
local input="$(realpath "$2")"
|
||||
|
||||
shift
|
||||
|
||||
if [[ ! -e "$input" ]]; then
|
||||
echo >&2 "$input not found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# generate output file name
|
||||
local output
|
||||
if [[ $# -gt 1 ]]; then
|
||||
output="$(basename "${input%/*}")"
|
||||
elif [[ -f "$input" ]]; then
|
||||
output="$(basename "${input%.[^.]*}")"
|
||||
elif [[ -d "$input" ]]; then
|
||||
output="$(basename "${input}")"
|
||||
fi
|
||||
|
||||
# if output file exists, generate a random name
|
||||
if [[ -f "${output}.${ext}" ]]; then
|
||||
output=$(mktemp "${output}_XXX") && rm "$output" || return 1
|
||||
fi
|
||||
|
||||
# add extension
|
||||
output="${output}.${ext}"
|
||||
|
||||
# safety check
|
||||
if [[ -f "$output" ]]; then
|
||||
echo >&2 "output file '$output' already exists. Aborting"
|
||||
return 1
|
||||
fi
|
||||
|
||||
case "$ext" in
|
||||
7z) 7z u "${output}" "${@}" ;;
|
||||
bz2) bzip2 -vcf "${@}" > "${output}" ;;
|
||||
gz) gzip -vcf "${@}" > "${output}" ;;
|
||||
lzma) lzma -vc -T0 "${@}" > "${output}" ;;
|
||||
lzo) lzop -vc "${@}" > "${output}" ;;
|
||||
rar) rar a "${output}" "${@}" ;;
|
||||
tar) tar -cvf "${output}" "${@}" ;;
|
||||
tbz|tar.bz2) tar -cvjf "${output}" "${@}" ;;
|
||||
tgz|tar.gz) tar -cvzf "${output}" "${@}" ;;
|
||||
tlz|tar.lzma) XZ_OPT=-T0 tar --lzma -cvf "${output}" "${@}" ;;
|
||||
txz|tar.xz) XZ_OPT=-T0 tar -cvJf "${output}" "${@}" ;;
|
||||
tZ|tar.Z) tar -cvZf "${output}" "${@}" ;;
|
||||
xz) xz -vc -T0 "${@}" > "${output}" ;;
|
||||
Z) compress -vcf "${@}" > "${output}" ;;
|
||||
zip) zip -rull "${output}" "${@}" ;;
|
||||
zst) zstd -c -T0 "${@}" > "${output}" ;;
|
||||
*) echo >&2 "$usage"; return 1 ;;
|
||||
esac
|
||||
}
|
Loading…
Reference in a new issue