
이 기능을 사용하여 여러 파일을 아카이브한다고 가정합니다.
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() 함수가 성공하지 못한 경우 아카이브 파일 업로드를 시도하고 싶지 않을 것이므로 접착제를 권장합니다 .
다음은 샘플 함수입니다 .bashrc
.
share()
{
ARCHIVE_NAME="$1"
archive "$ARCHIVE_NAME" "$@" && upload "$ARCHIVE_NAME"
}