暗号化されたアーカイブをアップローダーにパイプする

暗号化されたアーカイブをアップローダーにパイプする

次のような関数を使用して複数のファイルをアーカイブするとします。

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

しかし、問題が 1 つあります。暗号化されたアーカイブにアクセスできず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

&&archive() 関数が成功しなかった場合は、アーカイブ ファイルをアップロードしようとしない可能性が高いため、グルーをお勧めします。

以下はサンプル関数です.bashrc:

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

関連情報