diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2022-01-01 02:26:11 -0600 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2022-01-01 02:26:11 -0600 |
commit | 49edbf438ed690c76e6b2af80368c59404cf0167 (patch) | |
tree | 129b3adb2f5f39a1329a426a3b7d51ed2c2290c1 /plugins/transfer/transfer.plugin.zsh | |
parent | 1bc186dabe12b3d01b2257e82f3a104c48b8b3c7 (diff) | |
parent | 78c91ccbf99c77bd4d9cdb74279a40776721f66d (diff) | |
download | zsh-49edbf438ed690c76e6b2af80368c59404cf0167.tar.gz zsh-49edbf438ed690c76e6b2af80368c59404cf0167.tar.bz2 zsh-49edbf438ed690c76e6b2af80368c59404cf0167.zip |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'plugins/transfer/transfer.plugin.zsh')
-rw-r--r-- | plugins/transfer/transfer.plugin.zsh | 136 |
1 files changed, 82 insertions, 54 deletions
diff --git a/plugins/transfer/transfer.plugin.zsh b/plugins/transfer/transfer.plugin.zsh index db744b0cd..b34e115ce 100644 --- a/plugins/transfer/transfer.plugin.zsh +++ b/plugins/transfer/transfer.plugin.zsh @@ -1,69 +1,97 @@ -# transfer.sh Easy file sharing from the command line -# transfer Plugin -# Usage Example : -# > transfer file.txt -# > transfer directory/ - - - # Author: # Remco Verhoef <remco@dutchcoders.io> # https://gist.github.com/nl5887/a511f172d3fb3cd0e42d # Modified to use tar command instead of zip # -curl --version 2>&1 > /dev/null -if [ $? -ne 0 ]; then - echo "Could not find curl." +transfer() { + # check arguments + if [[ $# -eq 0 ]]; then + cat <<EOF +Error: no arguments specified. + +Usage: transfer [file/folder] [options] + +Examples: + transfer /tmp/test.md + transfer /tmp/test.md -ca + cat /tmp/test.md | transfer test.md + cat /tmp/test.md | transfer test.md -ca + +Options: + -ca Encrypt file with symmetric cipher and create ASCII armored output +EOF return 1 -fi + fi -transfer() { - # check arguments - if [ $# -eq 0 ]; - then - echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md" - return 1 + if (( ! $+commands[curl] )); then + echo "Error: curl is not installed" + return 1 + fi + + local tmpfile tarfile item basename + + # get temporarily filename, output is written to this file show progress can be showed + tmpfile=$(mktemp -t transferXXX) + + # upload stdin or file + item="$1" + + # crypt file with symmetric cipher and create ASCII armored output + local crypt=0 + if [[ "$2" = -ca ]]; then + crypt=1 + if (( ! $+commands[gpg] )); then + echo "Error: gpg is not installed" + return 1 + fi + fi + + if ! tty -s; then + # transfer from pipe + if (( crypt )); then + gpg -aco - | curl -X PUT --progress-bar -T - "https://transfer.sh/$item" >> $tmpfile + else + curl --progress-bar --upload-file - "https://transfer.sh/$item" >> $tmpfile fi + else + basename=$(basename "$item" | sed -e 's/[^a-zA-Z0-9._-]/-/g') - # get temporarily filename, output is written to this file show progress can be showed - tmpfile=$( mktemp -t transferXXX ) - - # upload stdin or file - file=$1 + if [[ ! -e $item ]]; then + echo "File $item doesn't exist." + return 1 + fi - if tty -s; - then - basefile=$(basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g') + if [[ -d $item ]]; then + # tar directory and transfer + tarfile=$(mktemp -t transferXXX.tar.gz) + cd $(dirname $item) || { + echo "Error: Could not change to directory $(dirname $item)" + return 1 + } - if [ ! -e $file ]; - then - echo "File $file doesn't exists." - return 1 - fi - - if [ -d $file ]; - then - echo $file - # tar directory and transfer - tarfile=$( mktemp -t transferXXX.tar.gz ) - cd $(dirname $file) && tar -czf $tarfile $(basename $file) - curl --progress-bar --upload-file "$tarfile" "https://transfer.sh/$basefile.tar.gz" >> $tmpfile - rm -f $tarfile - else - # transfer file - curl --progress-bar --upload-file "$file" "https://transfer.sh/$basefile" >> $tmpfile - fi - else - # transfer pipe - curl --progress-bar --upload-file "-" "https://transfer.sh/$file" >> $tmpfile + tar -czf $tarfile $(basename $item) + if (( crypt )); then + gpg -cao - "$tarfile" | curl --progress-bar -T "-" "https://transfer.sh/$basename.tar.gz.gpg" >> $tmpfile + else + curl --progress-bar --upload-file "$tarfile" "https://transfer.sh/$basename.tar.gz" >> $tmpfile + fi + rm -f $tarfile + else + # transfer file + if (( crypt )); then + gpg -cao - "$item" | curl --progress-bar -T "-" "https://transfer.sh/$basename.gpg" >> $tmpfile + else + curl --progress-bar --upload-file "$item" "https://transfer.sh/$basename" >> $tmpfile + fi fi - - # cat output link - cat $tmpfile - # add newline - echo + fi + + # cat output link + cat $tmpfile + # add newline + echo - # cleanup - rm -f $tmpfile + # cleanup + rm -f $tmpfile } |