Bash loop para adicionar --excluir lista para tar

0

Eu tenho um script bash que fiz para criptografar / descriptografar usando o GPG e alcatrão. No momento, eu tenho meu --exclude codificado no script, mas gostaria de torná-lo um pouco mais dinâmico e adicionar os itens a serem excluídos como argumentos ao executar a parte de criptografia do script.

Basicamente, estou tentando descobrir um loop (ou outra opção) para substituir as exclusões abaixo por valores de argumento. Agora os argumentos são atribuídos da seguinte forma:

$1 = Origem
$2 = Destino% $3 = Nome do arquivo% $4 = Chave gpg pública do destinatário

O que eu gostaria de realizar é qualquer argumento fornecido para $5 e que possa ser definido como arquivos / diretórios excluídos.

Eu procurei por todas as opções de loop para criar uma variável concatenando --exclude e o valor fornecido, mas estou chegando vazio. Agradecemos antecipadamente por qualquer ajuda.

tar -cpJ --exclude ~/VirtualBox_VMs --exclude ~/Truecrypt_Volumes ${SOURCE} | gpg -e -r ${RECIPIENT} -o ${SAVEAS}
    
por Drusher 15.03.2016 / 04:17

1 resposta

1

Existem dois truques relevantes aqui: você pode obter os argumentos iniciando em $5 usando um truque semelhante ao fatiamento de matriz ( "${@:5}" ), em seguida, criar a lista de --exclude argumentos como uma matriz e usar "${array[@]}" para incluí-los na linha de comando.

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}" ...
    
por 15.03.2016 / 19:28