Подтвердить что ты не робот

Читать входные данные из файла и соответственно синхронизировать

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

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

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

Я пробовал приходить с различными фильтрами PATTERN, как описано в man-странице rsync, но он все еще не работает.

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

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

4b9b3361

Ответ 1

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

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/

Или для цикла и копии:

# bash shell
for f in `cat /path/to/files.txt`; do cp $f /dest/; done

Ответ 2

Учитывая список файлов $HOME/GET/bringemback, содержащий

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

cd $HOME/GET

run

rsync -av --files-from=./bringemback [email protected]:. $HOME/GET/collect

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

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

или так я считаю.

полезно

Ответ 3

rsync поддерживает это:

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