任意文件加密归档功能

任意文件加密归档功能

我对 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”函数中调用它,就像它是普通的 shell 命令一样:

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'"
}

相关内容