Bash
使用加密歸檔任意文件的功能
我在 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
為什麼要迭代 $PWD?那不是一個清單。
要遍歷腳本或函式的所有參數,請使用
for ARG in "$@"; do
或縮寫形式
for ARG;
您可以使用“shift”將第一個參數保存到變數中,然後使用上述循環遍歷其餘參數。
對於 GPG 部分,您只需要使用您的 GPG 程式碼定義另一個函式,然後在您的“歸檔”函式中呼叫它,就像它是一個普通的 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'" }