Вы можете создать здесь-документ, который записывается во временный файл и затем обрабатывается. Временный файл будет автоматически удален, поэтому ручная очистка не требуется.
#!/bin/bash
mylist=/var/tmp/$$
trap 'rm -f ${mylist}' EXIT
cat << _EOF_ > ${mylist}
name1 url1
name2 url2
name3,url3
_EOF_
while read name url
do
printf "%s %s\n" ${name} ${url}
done < ${mylist}
Запуск от имени пользователя root rsync -og
, возможно, это то, что вы ищете.
Из справочной страницы:
-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.
The preservation of ownership will associate matching names by default, but may fall back to using the ID number in some circumstances (see also the --numeric-ids option for a full discussion).
-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.
The preservation of group information will associate matching names by default, but may fall back to using the ID number in some circumstances (see also the --numeric-ids option for a full discussion).
Вероятно, вы захотите использовать rsync
. Чтобы это работало, вам необходимо установить его на обоих машинах (если он еще не установлен). После этого просто запустите (как root):
rsync -avrHP root@source-host:/path/to/source-directory/ /path/to/destination
это предполагает, что:
root @ source-host:
из первого аргумента и добавьте аргумент root @ destination-host:
в аргумент второй. Примечание: невозможно запустить rsync с двумя удаленными хостами; только один из концов может быть «удаленным» концом. / etc / ssh / sshd_config
и найдите PermitRootLogin
. Если он установлен на нет
, переключите его на да
и перезапустите sshd
. Не забудьте снова отключить его после копирования файлов! Обратите внимание, что вам не не нужно сначала удалять уже скопированные файлы. Rsync обнаружит, что файлы существуют, но синхронизирует разрешения.Если есть файлы, которые были изменены с момента копирования, rsync также синхронизирует их содержимое.
В Linux вы можете создавать резервные копии и восстанавливать права собственности и разрешения (включая списки контроля доступа, но не контексты SELinux) с помощью инструментов ACL. Запустите getfacl -R
>permissions.txt в каталоге toplevel на машине с правильными разрешениями. Скопируйте выходной файл на целевую машину и запустите setfacl --restore=permissions.txt
в целевом каталоге toplevel.
Если вам нужно скопировать права собственности, а также разрешения, вам нужно будет выполнить часть восстановления от имени root.