Bash 循环将 --exclude 列表添加到 tar

Bash 循环将 --exclude 列表添加到 tar

我有一个bash 脚本我使用 GPG 和 tar 进行加密/解密。目前,我已将其--exclude硬编码到脚本中,但我想使其更具动态性,并在运行脚本的加密部分时将要排除的项目添加为参数。

基本上,我正在尝试找出一个循环(或其他选项)来用参数值替换下面的排除项。目前,参数分配如下:

$1=来源
$2=目的地
$3=文件名
$4=收件人的公共 gpg 密钥

我想要实现的是将提供的任何参数$5设置为排除的文件/目录。

我到处寻找循环选项来创建连接变量--exclude和提供的值,但一无所获。在此先感谢您的帮助。

tar -cpJ --exclude ~/VirtualBox_VMs --exclude ~/Truecrypt_Volumes ${SOURCE} | gpg -e -r ${RECIPIENT} -o ${SAVEAS}

答案1

$5这里有两个相关的技巧:您可以使用类似于数组切片的技巧( )开始获取参数"${@:5}",然后将参数列表构建--exclude为数组,并使用"${array[@]}"将它们包含在命令行中。

excludes=()    # start with an empty array
for excl in "${@:5}"; do    # for each extra argument...
    excludes+=(--exclude "$excl")    # add an exclude to the array
done

tar -cpJ "${excludes[@]}" "${SOURCE}" ...

相关内容