私は私の機能を動作させるのに十分なbashを知りません。コードは次のとおりです。
archive()
{
for f in $PWD
do
for ((i=1; i++;))
do
7za a "$1".7z $f -pSECRET -mhe
done
done
}
この関数では、任意の数の引数を取る必要があります。
archive foo file1.txt file2.jpg file3.asc ...
残念ながら、私はこの問題を直接解決する方法がまだわかりません。
そしてもう一つ。関数内に関数を生成することはまだ難しいです。しかし、誰かが定数パスワードの代わりに動的パスワードを使用する方法を示しているのは完璧です。
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 foo file1.txt file2.png
。
7-Zip (A) [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)
Scanning
Creating archive .7z
Compressing file1.txt
Compressing file2.png
Everything is Ok
Password for file foo.7z is X;~2\$82uZx@^22nFd}!jrn2]`[GceWx
答え1
$PWDを繰り返すのはなぜですか?これはリストではありません。
スクリプトまたは関数のすべての引数を繰り返すには、次のようにします。
for ARG in "$@"; do
または省略形
for ARG;
「shift」を使用して最初のパラメータを変数に保存し、上記のループを使用して残りのパラメータを繰り返すことができます。
GPG部分の場合は、GPGコードで別の関数を定義し、通常のシェルコマンドのように "archive"関数から呼び出すだけです。
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)
shift
for ARG; do
7za a "$ARCHIVE_NAME" "$ARG" -p"$PASSWORD" -mhe
done
echo "Created 7z archive with password '$PASSWORD'"
}