У меня есть скрипт 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 ответ1

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}" ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .