hehe
This commit is contained in:
parent
cac59ddf59
commit
43f05b0c93
2 changed files with 66 additions and 14 deletions
35
README.md
35
README.md
|
@ -1,2 +1,35 @@
|
||||||
# agetar
|
# agetar
|
||||||
actual description and development pending... I am lazy
|
`agetar` is a simple wrapper around `tar` and `age` to easily pack files into an encrypted tar archive or extract files from an encrypted tar archive.
|
||||||
|
|
||||||
|
## dependencies
|
||||||
|
- a posix-compliant shell
|
||||||
|
- either `bsdtar` or `tar` (`bsdtar` takes priority)
|
||||||
|
- [age](https://github.com/FiloSottile/age)
|
||||||
|
|
||||||
|
# usage
|
||||||
|
```
|
||||||
|
usage:
|
||||||
|
agetar -e (-r RECIPIENT | -R PATH)... [-a] [-o OUTPUT] [--] FILES...
|
||||||
|
agetar -e -p [-a] [-o OUTPUT] [--] FILES...
|
||||||
|
agetar -d [-i PATH]... [-o OUTPUT] [--] FILES...
|
||||||
|
|
||||||
|
options:
|
||||||
|
-e encrypt the input files to an output tar
|
||||||
|
-d decrypt the input tar to output files
|
||||||
|
-o OUTPUT encrypting: write output tar to OUTPUT. stdout if omitted
|
||||||
|
decrypting: directory to extract to. PWD if omitted
|
||||||
|
-a encrypt to a PEM encoded format
|
||||||
|
-p encrypt with a passphrase
|
||||||
|
-r RECIPIENT encrypt to the specified RECIPIENT. can be repeated
|
||||||
|
-R PATH encrypt to the recipients listed at PATH. can be repeated
|
||||||
|
-i PATH decrypt using the identity file at PATH. can be repeated
|
||||||
|
|
||||||
|
at least one FILE is required for both encrypting and decrypting
|
||||||
|
if multiple are present, each will be processed with the same identities
|
||||||
|
|
||||||
|
you probably want an OUTPUT when encrypting, even if it's not required
|
||||||
|
(age will yet at you for that anyway unless you also use -a)
|
||||||
|
|
||||||
|
most of these options are passed directly to age(1). see its man page for
|
||||||
|
more details.
|
||||||
|
```
|
||||||
|
|
45
agetar
45
agetar
|
@ -1,17 +1,13 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# I can't believe I'm making this
|
RED="$(printf '\033[38;5;9m')"
|
||||||
|
RESET="$(printf '\033[m')"
|
||||||
RED="$(tput setaf 9)" || RED="$(tput setf 4)"
|
|
||||||
GREEN="$(tput setaf 10)" || GREEN="$(tput setf 2)"
|
|
||||||
YELLOW="$(tput setaf 11)" || YELLOW="$(tput setf 6)"
|
|
||||||
RESET="$(tput sgr0)"
|
|
||||||
set -euf
|
set -euf
|
||||||
BN="${0##*/}"
|
BN="${0##*/}"
|
||||||
export POSIXLY_CORRECT=1
|
export POSIXLY_CORRECT=1
|
||||||
|
|
||||||
if [ "${NO_COLOR:-}" ]; then
|
if [ "${NO_COLOR:-}" ]; then
|
||||||
RED="" GREEN="" YELLOW="" RESET=""
|
RED="" RESET=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
errecho() {
|
errecho() {
|
||||||
|
@ -22,11 +18,34 @@ fail() {
|
||||||
errecho "${RED}error: $BN: $RESET$*"
|
errecho "${RED}error: $BN: $RESET$*"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
_type() { type >/dev/null 2>&1 ; }
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat >&2 <<-EOF
|
cat >&2 <<-EOF
|
||||||
usage:
|
usage:
|
||||||
$BN
|
$BN -e (-r RECIPIENT | -R PATH)... [-a] [-o OUTPUT] [--] FILES...
|
||||||
|
$BN -e -p [-a] [-o OUTPUT] [--] FILES...
|
||||||
|
$BN -d [-i PATH]... [-o OUTPUT] [--] FILES...
|
||||||
|
|
||||||
|
options:
|
||||||
|
-e encrypt the input files to an output tar
|
||||||
|
-d decrypt the input tar to output files
|
||||||
|
-o OUTPUT encrypting: write output tar to OUTPUT. stdout if omitted
|
||||||
|
decrypting: directory to extract to. PWD if omitted
|
||||||
|
-a encrypt to a PEM encoded format
|
||||||
|
-p encrypt with a passphrase
|
||||||
|
-r RECIPIENT encrypt to the specified RECIPIENT. can be repeated
|
||||||
|
-R PATH encrypt to the recipients listed at PATH. can be repeated
|
||||||
|
-i PATH decrypt using the identity file at PATH. can be repeated
|
||||||
|
|
||||||
|
at least one FILE is required for both encrypting and decrypting
|
||||||
|
if multiple are present, each will be processed with the same identities
|
||||||
|
|
||||||
|
you probably want an OUTPUT when encrypting, even if it's not required
|
||||||
|
(age will yet at you for that anyway unless you also use -a)
|
||||||
|
|
||||||
|
most of these options are passed directly to age(1). see its man page for
|
||||||
|
more details.
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,8 +75,8 @@ shift $((OPTIND - 1))
|
||||||
TAR="$(mktemp)"
|
TAR="$(mktemp)"
|
||||||
trap 'rm "$TAR"' INT HUP QUIT EXIT
|
trap 'rm "$TAR"' INT HUP QUIT EXIT
|
||||||
if [ "$TYPE" = "e" ]; then
|
if [ "$TYPE" = "e" ]; then
|
||||||
{ type bsdtar && CMD="bsdtar -rL -f"; } || \
|
{ _type bsdtar && CMD="bsdtar -rL -f"; } || \
|
||||||
{ type tar && CMD="tar -rh -f"; } || \
|
{ _type tar && CMD="tar -rh -f"; } || \
|
||||||
fail "can't find tar command!"
|
fail "can't find tar command!"
|
||||||
for f; do
|
for f; do
|
||||||
if [ -f "$f" ] || [ -d "$f" ]; then
|
if [ -f "$f" ] || [ -d "$f" ]; then
|
||||||
|
@ -68,12 +87,12 @@ if [ "$TYPE" = "e" ]; then
|
||||||
done
|
done
|
||||||
eval 'age $AGEOPTS ${OUTPUT:+-o "$OUTPUT"} '"$RECIPIENTS $RECIPIENTS_FILES $IDENTITIES"' "$TAR"'
|
eval 'age $AGEOPTS ${OUTPUT:+-o "$OUTPUT"} '"$RECIPIENTS $RECIPIENTS_FILES $IDENTITIES"' "$TAR"'
|
||||||
else
|
else
|
||||||
{ type bsdtar && CMD="bsdtar -x -f"; } || \
|
{ _type bsdtar && CMD="bsdtar -x -f"; } || \
|
||||||
{ type tar && CMD="tar -x -f"; } || \
|
{ _type tar && CMD="tar -x -f"; } || \
|
||||||
fail "can't find tar command!"
|
fail "can't find tar command!"
|
||||||
for f; do
|
for f; do
|
||||||
eval 'age $AGEOPTS -o "$TAR" '"$RECIPIENTS $RECIPIENTS_FILES $IDENTITIES"' "$f"'
|
eval 'age $AGEOPTS -o "$TAR" '"$RECIPIENTS $RECIPIENTS_FILES $IDENTITIES"' "$f"'
|
||||||
[ ! -d "${OUTPUT:=$PWD}" ] && mkdir -p "$OUTPUT"
|
[ ! -d "${OUTPUT:="$PWD"}" ] && mkdir -p "$OUTPUT"
|
||||||
$CMD "$TAR" -C "$OUTPUT"
|
$CMD "$TAR" -C "$OUTPUT"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue