Изменение владельца и группы только для определенных владельцев

Это не работает, поскольку переменная оболочки installed— это две разные переменные в функции progressbar(в ее окружении подоболочки )и в функции installplugin. Функция progressbarвыполняется в подоболочке, поскольку вы запускаете ее как фоновую задачу. Он унаследует значение от своей родительской среды при запуске функции, но родитель не сможет установить новое значение в дочерней среде (подоболочке progressbar).

Это по-прежнему использует progressbarв качестве фоновой задачи, но позволяет установить ловушку для выхода из бесконечного цикла. Основная функция, foo, запускает ловушку, посылая ей соответствующий сигнал, когда это делается.

progressbar () {
    trap 'break' USR1

    while printf '.' >&2; do
        sleep 0.25
    done
}

foo () {
    progressbar & pid="$!"

    echo 'working...'
    sleep 5
    echo 'done.'

    kill -s USR1 "$pid"
}

foo
4
05.12.2020, 22:55
2 ответа

Вы не используете -numeric-idsи/или -fake-superдля резервного копирования (и восстановления ). Если вы немного измените команду rsync, вы получите правильное сохранение и восстановление отображений.

В этих примерах -Mуказывает rsyncприменить следующую опцию, т. е. подделку, на удаленной стороне соединения. Дополнительным побочным эффектом является то, что вам не нужна удаленная сторона (, где хранятся резервные копии ), для запуска от имени пользователя root

.

Резервные копии передаются с клиента на сервер резервных копий.

sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --numeric-ids -M--fake-super --exclude-from="${exc_path}" "${src_path}" "${dst_addr}:${dst_path}"

Это приведет к извлечению резервных копий из клиента (, т. е. восстановлению )

.
sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --numeric-ids -M--fake-super --exclude-from="${exc_path}" "${dst_addr}:${dst_path}" "${src_path}"

И это, запущенное на сервере резервных копий, передаст резервные копии клиенту (, т.е. восстановит)

sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --numeric-ids --fake-super "${dst_path}" "${src_host}:${src_path}"
9
18.03.2021, 22:45

Каждый файл хранит информацию о своем владельце индивидуально, нет структуры данных для индексации файлов на основе их владельцев. Итак, что бы вы ни делали, вам придется охотиться за файлами и менять UID для каждого из них по отдельности. К счастью, это не очень сложно сделать; это должно сделать:

find "$dir" -user olduser -exec chown newuser {} +

Конечно, было бы лучше изменить систему резервного копирования для хранения (и восстановления )правильных UID, особенно если вы могли создавать резервные копии файлов, принадлежащих нескольким пользователям.

6
18.03.2021, 22:45

Теги

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