
Angenommen, ich archiviere mehrere Dateien mit dieser Funktion:
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'"
}
Das funktioniert gut und ich habe versucht, ein verschlüsseltes Archiv hochzuladen aufFile-Sharing-Server.
Es gibt also das Skript, das den Inhalt der Datei auf den Server hochlädt (Quelle):
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;
}
Ich versuche also, das verschlüsselte Archiv auf naive Weise weiterzuleiten:
archive 1.rar pass.tar.gz d7432.png foo.7z | upload
Es gibt jedoch ein Problem: Das verschlüsselte Archiv ist nicht erreichbar upload
und der Befehl wird ohne Ergebnis beendet.
Die Frage ist also: Wie muss ich die Datei weiterleiten, damit sie korrekt hochgeladen wird?
Antwort1
Da Ihre Upload()-Funktion einen Parameter ($1) erwartet, der als Name der archivierten Datei verwendet werden soll, geben Sie ihn in Ihrer Befehlszeile weiter:
archive foo.7z 1.rar pass.tar.gz d7432.png && upload foo.7z
Wenn foo.7z auch ein variabler Parameter für archive() ist, übergeben Sie einfach die gleiche Variable an upload():
archive $archivename 1.rar pass.tar.gz d7432.png && upload $archivename
Ich würde den Kleber empfehlen &&
, da Sie wahrscheinlich nicht versuchen möchten, die Archivdatei hochzuladen, wenn die Funktion archive() nicht erfolgreich war.
Hier ist eine Beispielfunktion für .bashrc
:
share()
{
ARCHIVE_NAME="$1"
archive "$ARCHIVE_NAME" "$@" && upload "$ARCHIVE_NAME"
}