암호화된 아카이브를 업로더로 파이프

암호화된 아카이브를 업로더로 파이프

이 기능을 사용하여 여러 파일을 보관한다고 가정해 보겠습니다.

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

&&archive() 함수가 성공하지 못할 경우 아카이브 파일 업로드를 시도하고 싶지 않을 것이므로 Glue를 사용하는 것이 좋습니다 .

다음은 예제 함수입니다 .bashrc.

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

관련 정보