通过管道将加密存档传输至上传者

通过管道将加密存档传输至上传者

假设,我确实使用此功能归档了多个文件:

gen_password () 
{
    gpg --gen-random 1 "$1" | perl -ne'
        s/[\x00-\x20]/chr(ord($^N)+50)/ge;
        s/([\x7E-\xDB])/chr(ord($^N)-93)/ge;
        s/([\xDC-\xFF])/chr(ord($^N)-129)/ge;
        print $_, "\n"'
}

archive () 
{
    ARCHIVE_NAME="$1"
    PASSWORD=$(gen_password 32)
    7za a -p"$PASSWORD" -mhe -- "$ARCHIVE_NAME" "$@"
    echo "Created 7z archive with password '$PASSWORD'"
}

这效果很好,我尝试上传加密存档文件共享服务器

所以有将文件内容上传到服务器的脚本(来源):

upload() 
{
    if [ $# -eq 0 ]; then echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"; return 1; fi 
    tmpfile=$( mktemp -t transferXXX ); if tty -s; then basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; else curl --progress-bar --upload-file "-" "https://transfer.sh/$1" >> $tmpfile ; fi; cat $tmpfile; rm -f $tmpfile;
}

所以我试图以天真的方式传输加密档案:

archive 1.rar pass.tar.gz d7432.png foo.7z | upload

但有一个问题 - 无法访问加密的存档,upload并且命令退出时没有任何结果。

所以,问题是:我应该如何通过管道传输文件以使其正确上传?

答案1

由于您的 upload() 函数需要一个参数 ($1) 作为存档文件名,因此请在命令行中传递它:

archive foo.7z 1.rar pass.tar.gz d7432.png && upload foo.7z

如果 foo.7z 也是 archive() 的变量参数,只需将相同的变量传递给 upload() 即可:

archive $archivename 1.rar pass.tar.gz d7432.png && upload $archivename

我会推荐使用&&glue,因为如果 archive() 函数没有成功,您可能不想尝试上传存档文件。

这是 的示例函数.bashrc

share()
{
    ARCHIVE_NAME="$1"
    archive "$ARCHIVE_NAME" "$@" && upload "$ARCHIVE_NAME"
}

相关内容