2016-04-18 60 views
-2

私が期待しない余分な作業をしているrsyncコマンドに問題があります。以下のコマンドは、単一のファイルを宛先サーバのディレクトリにrsyncするだけです。Rsyncは単一ファイルではなくディレクトリ全体をコピーします

そのディレクトリの他のすべてのファイルを試みても、${OUT_DIR}/makeディレクトリから余分なファイルをコピー先にコピーしています。

rsyncでターゲットファイルのみをコピーするにはどうすればよいですか?

eval rsync -azu --delete \ 
--include ${OUT_DIR}/make/file.mk \ 
--exclude ${OUT_DIR}/make \ 
${OUT_DIR}/make/file.mk 
${DEST_USER}@${DEST_SVR}:$OUT_DIR_DEST/make 

私はすでに、「余分な」オプションを削除しようとしましたが、私はそれをやって、エラーに遭遇し、その最善の行動のように思えたワーキング上記のコマンドを取得しようとしています。 、私が行っている検索

eval rsync -azu 
${OUT_DIR}/make/file.mk 
${DEST_USER}@${DEST_SVR}:$OUT_DIR_DEST/make 

opening connection using: ssh -x -i ... rsync --server -vvulogDtprze.iLs . 

$OUT_DIR_DEST/make 
note: iconv_open("UTF-8", "UTF-8") succeeded. 
(Client) Protocol versions: remote=30, negotiated=30 
sending incremental file list 
[sender] make_file(file.mk,*,0) 
[sender] flist start=1, used=1, low=0, high=0 
[sender] i=1 /OUTDIR/path file.mk mode=0100664 len=91 uid=300 gid=301 flags=5 
send_file_list done 
file list sent 
send_files starting 
ERROR: buffer overflow in recv_rules [receiver] 
rsync error: error allocating core memory buffers (code 22) at util.c(123) [receiver=3.0.6] 
rsync: connection unexpectedly closed (9 bytes received so far) [sender] 
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6] 
_exit_cleanup(code=12, file=io.c, line=600): entered 
_exit_cleanup(code=12, file=io.c, line=600): about to call exit(12) 

グーグルのほとんどは明らかなにつながるされていません。

--delete関連オプションを削除
eval rsync \ 
${OUT_DIR}/make/file.mk 
${DEST_USER}@${DEST_SVR}:$OUT_DIR_DEST/make 

Incompatible options specified for inc-recursive connection. 
rsync error: syntax or usage error (code 1) at compat.c(268) [sender=3.0.6] 

:しかし、ここで私はそれを変更しようとすると、私は何を得るのですいずれかの問題に対する解決策。

+0

なぜこれらの議論が必要だと思いますか? –

+0

--deleteオプションを削除した場合、 "ERROR:recv_rulesのバッファオーバーフロー"というエラーが表示されます。私がargを設定しなかった場合、エラー "inc-recursive connectionに指定されている互換性のないオプション"が表示される – Jake88

+0

私が必要としているのは "信じる"ということではありません。私はそれらを取り除きたい、しかし、そうすることは、より多くの問題につながる。上記の更新された説明を参照してください。 – Jake88

答えて

1

私はevalのビジネスを除外していますが、余分な拡張は明確ではありませんが、rsyncがどのように見えるのかを示すことができます。 bashまたはzshを使用している場合は、set -xを実行して、実行するコマンドを表示します実際にはは変数展開後のように見えます。

最も簡単な解決策は、このようなものです:

rsync -azu \ 
    /local/path/to/make/file.mk \ 
    [email protected]:/remote/path/to/make/ 

あなたが本当に使用したい場合は、このようにそれを行う(1多分、含ま以上あるかどう良い)ルールを包含/除外:

rsync -azu \ 
    --include=file.mk \ 
    --exclude='*' \ 
    /local/path/to/make/ \ 
    [email protected]:/remote/path/to/make/ 

--includeパターンはソースディレクトリのルートからの相対パスなので、--include=/local/path/to/make/file.mkと言うと、そのパターンは/local/path/to/make/local/path/to/make/file.mkというファイルと一致しますが、それは明らかに意味していません。

--excludeルールは同じように機能するため、基本的には存在しないものを除外するように指示されているため、除外されるものはありません。 --exclude='*'は、(明示的に含まれていなかった)すべてを除外することを意味します。そのようなエラーは発生しません。

これらのルールは、--relativeオプションを使用して変更できます。それはあなたの元のコマンドを動作させるかもしれないが、私は思うが、それはここでは、リモート・システム上のファイルが作成されます:あなたはそれを行うしかし/remote/path/to/make/local/path/to/make/file.mk

を含み、ルールは除外ルールの前に来る必要があります:rsyncが最初を使用しています指定されたファイルまたはディレクトリに一致するルール。あなたが投稿


エラーメッセージは、リモートマシンのメモリが不足している示唆している:

ERROR: buffer overflow in recv_rules [receiver] 
rsync error: error allocating core memory buffers (code 22) at util.c(123) [receiver=3.0.6] 

メモリ使用量が大幅3.0で改善されていますが、3.0を持っているように思われました。6おそらくそれはあなたが修正できるものではありません。新しいバージョン(私は3.1.2を持っている)を試してみるのは悪い計画ではないかもしれません。

ファイルの多くは、そのフォルダ(除外1以外のすべて)の下にありますならば、あなたは再帰的なオプション回避することにより、メモリを節約することができるかもしれない:すべて私がやった

rsync -ptgo -zu \ 
    /local/path/to/make/file.mk \ 
    [email protected]:/remote/path/to/make/ 

はと-aに置き換えられます同等の-rlptgoDを削除し、不要なオプション、特に-rを削除しました。

それ以外の場合は、そのマシンにスワップファイルを追加することができます。

+0

大きな説明。私はこれが正常に動作するはずだと思うが、私はまだ 'ERROR:recv_rules [receiver]のバッファオーバーフロー'転送を停止しているエラーが出ます。私は、2つのマシン間のSSHまたはrsyncに問題があると思います。 RsyncとSSHのバージョンはどちらも同じですので、recv_rulesの問題を引き起こす原因は不明です。 – Jake88

+0

リモートマシンのRAMが不足しているようですか? – ams

+0

私はそうは思わない。私はそれがサーバ側のこの特定の行と関係していると思います: 'rsync --server -logDtprze.iLs --delete。 $ ROOTDIR'。私は送信者と受信者がこの受信者のルールのために送信されたコマンドに同意しないと思います。 – Jake88

関連する問題