Skip to content

Instantly share code, notes, and snippets.

@lpicanco
Created June 25, 2020 00:07
Show Gist options
  • Save lpicanco/a3ed0cec89a76f0e29bf1f24a0a6a4e0 to your computer and use it in GitHub Desktop.
Save lpicanco/a3ed0cec89a76f0e29bf1f24a0a6a4e0 to your computer and use it in GitHub Desktop.
#/bin/bash
SCRIPT_NAME=$0
OPT=$1
FILES_PATH=$2
set -e
usage() {
echo -n "${SCRIPT_NAME} [OPTIONS] [FILE_PATH]
Recursively Encrypt/Decrypt files at given path
Options:
-e|--encrypt Encrypts
-d|--decrypt Decrypts
"
exit 1
}
encrypt() {
read -s -p 'enter passcode:' PASSCODE && echo
read -s -p 'enter passcode again:' PASSCODE2 && echo
[[ "$PASSCODE" != "$PASSCODE2" ]] && echo "Passcodes must be the same." && exit 1
read -e -p "Sure you want to RECURSIVELY encrypt files in "${FILES_PATH}" and its subdirectories? [y/n] " YN
[[ $YN != "y" && $YN != "Y" ]] && echo "Action cancelled" && exit 0
find "${FILES_PATH}" -type f | grep -v '\.enc$' | while read fileName
do
[[ -z "$encrypted" ]] && encrypted=0
echo -en "\rEncrypting $fileName($encrypted)"
[[ -f "$fileName" ]] && openssl aes-256-cbc -salt -k $PASSCODE -in "$fileName" -out "$fileName.enc"
if [ $? -eq 0 ]
then
rm "$fileName"
encrypted=$((encrypted+1))
fi
done
echo "Done encrypting all $encrypted files."
}
decrypt() {
read -s -p 'enter passcode:' PASSCODE && echo
find ${FILES_PATH} -type f | grep -E 'enc$' | while read fileName
do
[[ -z "$decrypted" ]] && decrypted=0
[[ -z "$attempted" ]] && attempted=0
attempted=$((attempted+1))
[[ -f "$fileName" ]] && openssl aes-256-cbc -d -k $PASSCODE -in "$fileName" -out "${fileName//.enc/}"
if [ $? -eq 0 ]
then
# rm "$fileName"
decrypted=$((decrypted+1))
else
rm "${fileName//.enc/}"
fi
echo -en "\rdecrypted $decrypted of $attempted file(s)"
done
echo "Done decrypting all files."
}
case $OPT in
-e|--encrypt)
encrypt
;;
-d|--decrypt)
decrypt
;;
*)
usage
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment