透過管道將加密存檔傳輸至上傳者

透過管道將加密存檔傳輸至上傳者

假設,我確實使用此功能歸檔了多個文件:

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"
}

相關內容