Не могу пропустить подкаталог 4-го уровня в цикле bash

Я написал сценарий bash, который будет перебирать каталог / data и выполнять резервное копирование, а затем шифровать все тома, используя двойственность.

Мы обнаружили, что одно из приложений генерирует тонну больших файлов, которые нам не нужно резервировать. поэтому я пытаюсь найти способ исключить этот подкаталог из скрипта

backup_volume() { TARGET_DEVICE=$1
    for vol in /data/*; do
        VOLUME=$(basename $vol)
        echo "Backing up $VOLUME on $TARGET_DEVICE/$VOLUME"
        duplicity --file-prefix ${VOLUME}_ --full-if-older 1M /data/$VOLUME $TARGET_DEVICE/$VOLUME --allow-source-mismatch
--encrypt-key "Privbackup" --gpg-options "--batch --pinentry-mode loopback --trust-model always" || ERRORS="$ERRORS $vol>$TARGET_DEVICE"
        duplicity --file-prefix ${VOLUME}_ remove-older-than 1M --force --encrypt-key "Privbackup" --gpg-options "--batch --pinentry-mode loopback --trust-model always" $TARGET_DEVICE/$VOLUME || ERRORS="$ERRORS $vol>$TARGET_DEVICE"
done
}

родственник реж .... помогите!

1
задан 6 August 2019 в 18:13

1 ответ

TL; DR: рассмотреть --exclude опция от duplicity.


/data/* расширится до всех нескрытых файлов в /data, значение его произведет:

/data/file1
/data/file2
/data/dir1
/data/dir2

Это не рекурсивно вызовет, таким образом, это не расширится до:

/data/dir1/file1
/data/dir1/dir2

Можно попробовать printf '%s\n' /data/*.

Если Вы хотите, чтобы это рекурсивно вызвало, использовать globstar и **:

shopt -s globstar
for vol in /data/**; done
    [ "$vol" = "/data/dir1/dir2/dir3" ] && continue
    ...
done

# Unset globstar if you want:
shopt -u globstar

Во всяком случае! Необходимо скорее рассмотреть --exclude опция от duplicity.

duplicity --exclude /data/dir1/dir2/dir3
1
ответ дан 7 December 2019 в 14:59

Другие вопросы по тегам:

Похожие вопросы: