Читать входные данные из файла и соответственно синхронизировать
У меня есть текстовый файл, который содержит список файлов и каталогов, которые я хочу скопировать (один в строке). Теперь я хочу, чтобы rsync взял этот ввод из моего текстового файла и синхронизировал его с пунктом назначения, который я предоставляю.
Я пробовал играть с параметрами "--include-from=FILE"
и "--file-from=FILE"
rsync, но он просто не работает
Я также попытался выполнить предварительную фиксацию "+"
в каждой строке в моем файле, но все еще не работает.
Я пробовал приходить с различными фильтрами PATTERN, как описано в man-странице rsync, но он все еще не работает.
Может ли кто-нибудь предоставить мне правильный синтаксис для этого варианта использования. Я пробовал вещи на Fedora 15, RHEL 6.2 и Ubuntu 10.04, и никто не работал. Так что я определенно чего-то не хватает.
Большое спасибо.
Ответы
Ответ 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/