Bash

將加密存檔通過管道傳輸到上傳者

  • February 17, 2016

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

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並且命令退出沒有結果。

所以,問題是:我應該如何通過管道將文件正確上傳?

由於您的 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

我會推薦&&膠水,因為如果 archive() 函式沒有成功,您可能不想嘗試上傳存檔文件。

這是範例函式.bashrc

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

引用自:https://unix.stackexchange.com/questions/263923