모든 파일 암호화 및 보관 기능

모든 파일 암호화 및 보관 기능

나는 내 기능을 작동시킬 만큼 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'"
}

관련 정보