читать ввод из файла и синхронизировать соответственно - PullRequest
36 голосов
/ 19 марта 2012

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

Я пытался поиграться с "--include-from=FILE" и "--file-from=FILE" опциями rsync, но он просто не работает

Я также пытался предварительно исправить "+" в каждой строке моего файла, но все равно он не работает.

Я пытался использовать разные шаблоны PATTERN, как описано на странице руководства rsync, но он все еще не работает.

Может ли кто-нибудь предоставить мне правильный синтаксис для этого варианта использования. Я пробовал все вышеперечисленное на Fedora 15, RHEL 6.2 и Ubuntu 10.04, и ничего не получалось. Так что я определенно что-то упускаю.

Большое спасибо.

Ответы [ 3 ]

69 голосов
/ 19 марта 2012

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

rsync -av --files-from=/path/to/files.txt / /destination/path/

... Это может привести к тому, что пути будут относительно местоположения источника/ и сохранит всю абсолютную структуру в этом месте назначения.

Если ваша цель - скопировать все эти файлы в списке в место назначения, не сохраняя никакой иерархии путей (просто наборфайлы), тогда вы можете попробовать одно из следующих действий:

# note this method might break if your file it too long and
# exceed the maximum arg limit
rsync -av `cat /path/to/file` /destination/

# or get fancy with xargs to batch 200 of your items at a time
# with multiple calls to rsync
cat /path/to/file | xargs -n 200 -J % rsync -av % /destination/

Или цикл for и скопировать:

# bash shell
for f in `cat /path/to/files.txt`; do cp $f /dest/; done
6 голосов
/ 04 декабря 2013

Имеется список файлов $ HOME / GET / takeemback , содержащий

**need/A
alsoneed/B
shouldget/C**

cd $ HOME / GET

пробег

rsync -av --files-from=./bringemback me@theremote:. $HOME/GET/collect

получит файлы и поместит их в $HOME/GET/collect

$HOME/GET/
          collect/
                  need/A
                  alsoneed/B
                  shouldget/C

или около того, я верю.

полезно

4 голосов
/ 08 октября 2016

rsync поддерживает это изначально:

rsync --recursive -av --files-from=/path/to/files.txt / /destination/path/

...