Função para arquivar arquivos arbitrários com criptografia

1

Eu não sou tão avançado no bash, então não posso fazer a minha função funcionar corretamente. Aqui está o código:

archive()
{
for f in $PWD
do 
    for ((i=1; i++;))
    do
        7za a "$1".7z $f -pSECRET -mhe 
    done
done
}

Em ordem, esta função deve ter uma quantidade arbitrária de parâmetros como

archive foo file1.txt file2.jpg file3.asc ...

Infelizmente, não descobri como resolver isso sozinho.

E mais uma coisa. Para mim ainda é difícil fazer função dentro da função mas seria perfeito se alguém me mostrasse como usar senha dinâmica em vez de constante:

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

Saída final desejada para o comando 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\uZx@^22nFd}!jrn2]'[GceWx 
    
por im_infamous 02.12.2015 / 20:10

1 resposta

1

Por que você está interagindo com mais de $ PWD? isso não é uma lista.

Para iterar todos os argumentos para um script ou função, use

for ARG in "$@"; do

ou a forma abreviada

for ARG;

Você pode usar "shift" para salvar o primeiro parâmetro em uma variável e, em seguida, usar o loop como acima para iterar o restante dos parâmetros.

Para a parte GPG, você só precisa definir outra função com o seu código GPG e, em seguida, chamá-la dentro de sua função "archive" como se fosse um comando shell normal:

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'"
}
    
por 02.12.2015 / 20:56