Rsync с владельцем и правами назначения возможен?

см. также параметр --line-bufferedкоманды grep; он заставляет grep выполнять свой тест каждый раз, когда его стандартный ввод видит новую строку

0
22.06.2016, 12:58
3 ответа

Похоже, вы не хотите, чтобы они менялись после передачи.

Попробуйте команду ниже:

rsync -avr -o -g /source/directory user@:destinationHost/destination/directory

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

-o, --owner
    This option causes rsync to set the owner of the destination file to be 
    the same as  the source file, but only if the receiving rsync is being run 
    as the super-user (see also the --super and --fake-super options). Without 
    this option, the owner of new and/or transferred files are set to the invoking 
    user on the receiving side...

-g, --group
    This option causes rsync to set the group of the destination file to be the same as 
    the source file. If the receiving program is not running as the super-user (or if
    --no-super was specified), only groups that the invoking user on the receiving side
    is a member of will be preserved. Without this option, the group is set to the default
    group of the invoking user on the receiving side...

SEE MAN rsync
6
28.01.2020, 02:27

Вы не можете сделать это одной командой. Однако даже с более чем 100 пользователями автоматизировать задачу довольно просто, поэтому я не понимаю, почему вы настаиваете, чтобы это была одна команда.

В этом сценарии вам необходимо получить данные с целевого компьютера. Теоретически можно было бы управлять передачей с исходного сервера путем туннелирования rsync через обратный ssh туннель, что было бы значительно сложнее.

for testdir in /home/sub*/test1
do
    owner=$(stat -c %u "$testdir")
    rsync -avP --chown "$u" sourceserver:"$testdir"/ "$testdir"/
done

Если у вас нет флага - chown , вы можете эмулировать это с помощью двухэтапного процесса:

for testdir in /home/sub*/test1
do
    owner=$(stat -c %u "$testdir")
    rsync -avP --no-owner sourceserver:"$testdir"/ "$testdir"/
    chown -R "$u" "$testdir"                   # If possible
    # find "$testdir" -exec chown "$u" {} +    # Otherwise
done

Если вам нужно использовать вариант , найдите и ваш find не понимает + , замените его немного менее эффективным \; (это обратная точка с запятой).

0
28.01.2020, 02:27

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

rsync -e 'ssh -p 22' -quaxz --bwlimit=1000 --del --no-W --delete-excluded --exclude-from=/excludedstufflist /sourcedir serverIP:/destinationdir

, а затем, когда все это скопировано в нужное место в новой системе, выясните, какие новые UID ваша система предоставила данным из исходной системы. Это, вероятно, 1001, 1002 и т. Д. В этом случае вы легко можете do a

find /destinationdir -user 1001 -exec chown username '{}' \;
find /destinationdir -user 1002 -exec chown otherusername '{}' \;
etc.

Да, вам придется проделать это последнее действие 100 раз, но вы можете легко написать сценарий, если вы знаете последовательность UID, используемую во время rsync. Я сделал именно это один раз, перенеся около 60 пользователей из один сервер на другой, и он работал достаточно хорошо. Мне также потребовалось заменить групповые разрешения, аналогичная сделка;

chown --from=oldguy newguy * -R
chown --from=:friends :family * -R

Такие вещи. Надеюсь, ты сможешь это использовать.

1
28.01.2020, 02:27

Теги

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