あるリモートLinuxサーバーから別のリモートLinuxサーバーにディレクトリ(サブディレクトリとファイルを含む)をコピーする最良の方法は何ですか? SSHクライアント(PuTTYなど)を使用して両方に接続しました。私は両方にルートアクセスできます。
私が通常これを行うには2つの方法があり、どちらもsshを使用します:
scp -r sourcedir/ [email protected]:/dest/dir/
または、より堅牢で高速な(転送速度に関して)メソッド:
rsync -auv -e ssh --progress sourcedir/ [email protected]:/dest/dir/
動作の詳細については、各コマンドのマニュアルページをご覧ください。
以前に提案された返信を変更します。
rsync -avlzp /path/to/sfolder [email protected]:/path/to/remote/dfolder
次のように:
-a(アーカイブ用)は-rlptgoDを意味するため、上記のlとpは不要です。ハードリンクをコピーする-Hも含めるのが好きです。高価なので、デフォルトでは-aの一部ではありません。だから今、私たちはこれを持っています:
rsync -aHvz /path/to/sfolder [email protected]:/path/to/remote/dfolder
また、末尾のスラッシュに注意する必要があります。あなたはおそらく欲しい
rsync -aHvz /path/to/sfolder/ [email protected]:/path/to/remote/dfolder
ソース "sfolder"のコンテンツが宛先 "dfolder"に表示されるようにしたい場合。末尾のスラッシュがなければ、「sfolder」サブディレクトリが宛先「dfolder」に作成されます。
rsync -avlzp/path/to/folder [email protected]:/ path/to/remote/folder
scp -r <directory> <username>@<targethost>:<targetdir>
1台のマシンにログインする
$ scp -r/path/to/top/directory user @ server:/ path/to/copy
タスクが繰り返し発生する場合は、一斉に試してください。 http://www.cis.upenn.edu/~bcpierce/unison/
接続が切断されても続行できるように、rsyncを使用します。そして、何かが変更された場合は、それらをより速くコピーすることもできます!
RsyncはSSHで動作するため、コピー操作は安全です。
Rdiffbackup http://www.nongnu.org/rdiff-backup/index.html を使用しました。これは、凝ったオプションなしで必要なすべてを実行するためです。 rsyncアルゴリズムに基づいています。一度だけコピーする必要がある場合は、宛先ホスト上のrdiff-backup-dataディレクトリを後で削除できます。
rdiff-backup user1@Host1::/source-dir user2@Host2::/dest-dir
ドキュメントから:
rdiff-backupは、サブディレクトリ、ハードリンク、開発ファイル、権限、uid/gidの所有権、変更時間、拡張属性、ACL、およびリソースフォークも保持します。
-pオプションではすべてが保持されないため、scp -p提案のボーナスです(たとえば、ディレクトリの権限が不適切に設定されている)
ubuntuにインストールします。
Sudo apt-get install rdiff-backup
scpはジョブを実行しますが、1つのしわがあります。2番目のリモート接続先への接続は、最初のリモート接続先の構成を使用するため、ローカル環境で.ssh/configを使用し、rsaキーとdsaキーが作業するには、エージェントを最初のリモートホストに転送する必要があります。
さて、簡単な答えは、 'scp'マンページ、またはおそらくrsync-コピーする必要があるものに応じて見てください。必要に応じて、tar-over-sshを実行することもできます。
tar cvf - | ssh server tar xf -
私はあなたが試すことができると思います:
rsync -azvu -e ssh user@Host1:/directory/ user@Host2:/directory2/
(そして、あなたはHost0にいて、Host1からHost2に直接コピーしたいと思います)
上記がうまくいかない場合は、以下を試してください:
ssh user@Host1 "/usr/bin/rsync -azvu -e ssh /directory/ user@Host2:/directory2/"
これで、Host1からHost2へのパスワードなしのSSHログインが既に設定されている場合、動作します。
非rootユーザーとして理想的には:
scp -r src $ Host:$ path
すでに$ Hostのコンテンツの一部を使用している場合は、sshでrsyncをトンネルとして使用することを検討してください。
/アラン
正確なコピーが必要な場合は、おそらく-pスイッチを使用してscpを使用することをお勧めします。 scp デバイスからの読み取りであり、cpioに問題があることがわかったので、個人的には常にtarを使用します、 このような:
cd /Origin; find . -xdev -depth -not -path ./lost+found -print0 \
| tar --create --atime-preserve=system --null --files-from=- --format=posix \
--no-recursion --sparse | ssh targethost 'cd /target; tar --extract \
--overwrite --preserve-permissions --sparse'
ファイルをコピーする他のさまざまな手段を使用して、この呪文をファイルに保存します。これはSSHを介したコピー用です。もう1つは、圧縮されたアーカイブへのコピー、同じコンピューター内でのコピー、およびSSHが遅すぎる場合の暗号化されていないTCPソケット上のコピーです。
通常、上記のscpが最善の方法ですが、リモートディレクトリ仕様のコロンを忘れないでください。そうしないと、ローカルマシン上のソースディレクトリのコピーが取得されます。
私はtarをsshにパイプするのが好きです。
tar cf-[ディレクトリ] | ssh [ユーザー名] @ [ホスト名] tar xf--C [リモートボックスの宛先]
この方法は多くのオプションを提供します。ルートsshを無効にする必要があるため、通常のユーザーとしてリモートサーバーにログインしているため、複数のユーザーアカウントのファイルのコピーは困難です。これを回避するには、所有権を保持したまま、リモートボックスにtarファイルを作成します。
tar cf-[ディレクトリ] | ssh [ユーザー名] @ [ホスト名] "cat> output.tar"
接続が遅い場合は、圧縮を追加できます。zはgzip、jはbzip2です。
tar cjf-[ディレクトリ] | ssh [ユーザー名] @ [ホスト名] "cat> output.tar.bz2"
tar czf-[ディレクトリ] | ssh [ユーザー名] @ [ホスト名] "cat> output.tar.gz"
tar czf-[ディレクトリ] | ssh [ユーザー名] @ [ホスト名] tar xzf--C [リモートボックスの宛先]