Назад | Перейти на главную страницу

rsync --files-from эквивалент

Я пытаюсь выполнить резервное копирование некоторых данных с сервера, на котором работает старая версия rsync - по разным причинам я не могу просто обновить программное обеспечение.

Обычно я использую --files-from и предоставляю список файлов и каталогов для резервного копирования, но эта версия rsync не имеет этого переключателя. Есть ли способ с другими переключателями, чтобы старый rsync вел себя так же?

Я пробовал комбинацию --include-from = --exclude = *, но она выглядит недостаточно рекурсивной (например, / etc / * создает резервные копии только непосредственно под / etc).

Я подозреваю, что xargs - ваш друг в этом случае.

Полностью непроверено:

 # cat file | xargs -IREPLACE rsync -v REPLACE server:/path

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

Обычно xargs просто помещает аргументы в конец строки, но с rsync вы хотите, чтобы адресат оставался последним, поэтому мы используем параметр -I, чтобы заменить строку аргументами. (Это непроверенный бит). Я также немного не уверен, что rsync будет делать с путями, поэтому, пожалуйста, внимательно проверьте это, прежде чем использовать его в гневе.

Если у вас есть проблема с xargs, вы можете использовать что-то вроде:

for i in $(cat file); do rsync -v $i server:/path; done

Если ваш файл больше, вы, вероятно, захотите вместо этого использовать цикл while / read. Это будет намного медленнее, поскольку будет обрабатывать один файл за раз.

Если ваши include / excludes не повторяются, возможно, вы не указали -r? Если вы привыкли использовать --files-from тогда вы могли бы избавиться от этой привычки.

Кроме того, может помочь указание точной команды, которую вы используете. include-from/exclude-from определенно рекурсивно хорошо для меня.

Глупое решение, не лишенное смысла, которое мне приходилось использовать раньше на некоторых серверах, когда один только rsync не хочет размещать хорошее. Используйте tar для захвата только тех файлов, которые вам нужны:

cat INCLUDES
/home/user/index.htm
/home/user/robots.txt

tar cf INCLUDES.tar INCLUDES
for file in `cat INCLUDES`; do tar -r --file=INCLUDES.tar $file; done

rsync -avzP INCLUDES.tar user@remoteHost.com:./remote_path

--- Now on remote server

mkdir INCLUDES
tar xf INCLUDES.tar -C ./INCLUDES
rsync -avzP INCLUDES/home/user/ /home/user/