web-dev-qa-db-ja.com

ファイルから入力を読み取り、それに応じて同期する

コピーするファイルとディレクトリのリストを含むテキストファイルがあります(1行に1つ)。ここで、rsyncがテキストファイルからこの入力を取得し、指定した宛先に同期するようにします。

Rsyncの"--include-from=FILE"および"--file-from=FILE"オプションを試してみましたが、機能していません

また、ファイルの各行に"+"を前もって付けてみましたが、それでも動作しません。

Rsyncのmanページで説明されているように、さまざまなフィルターパターンを使用してみましたが、まだ機能していません。

誰かがこのユースケースの正しい構文を提供してくれますか? Fedora 15、RHEL 6.2、Ubuntu 10.04で上記のことを試しましたが、どれも機能しませんでした。だから私は間違いなく何かが欠けています。

どうもありがとう。

36
slayedbylucifer

これらのファイルのコピー方法に応じて、この質問に答える方法は複数あります。絶対パスでファイルリストをコピーすることが目的の場合、次のようになります。

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
69
jdi

ファイルリストが与えられた場合$ HOME/GET/bringembackを含む

**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

またはそう信じています。

役立つ

6
helpful

rsyncはこれをネイティブにサポートします。

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

4
egafni