web-dev-qa-db-ja.com

リモートLinuxサーバーからリモートLinuxサーバーへのディレクトリコピー。どうやって?

あるリモートLinuxサーバーから別のリモートLinuxサーバーにディレクトリ(サブディレクトリとファイルを含む)をコピーする最良の方法は何ですか? SSHクライアント(PuTTYなど)を使用して両方に接続しました。私は両方にルートアクセスできます。

43
Arun Agrawal

私が通常これを行うには2つの方法があり、どちらもsshを使用します:

scp -r sourcedir/ [email protected]:/dest/dir/

または、より堅牢で高速な(転送速度に関して)メソッド:

rsync -auv -e ssh --progress sourcedir/ [email protected]:/dest/dir/

動作の詳細については、各コマンドのマニュアルページをご覧ください。

62
Ycros

以前に提案された返信を変更します。

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」に作成されます。

32
user19218

rsync -avlzp/path/to/folder [email protected]:/ path/to/remote/folder

9
Ana Betts
scp -r <directory> <username>@<targethost>:<targetdir>
6
Cody Brocious

1台のマシンにログインする

$ scp -r/path/to/top/directory user @ server:/ path/to/copy

5
Flame

タスクが繰り返し発生する場合は、一斉に試してください。 http://www.cis.upenn.edu/~bcpierce/unison/

3
user11104

scp または rsyncman scpman rsync

scp file1 file2 dir3 user@remotehost:path
2
John Douthat

接続が切断されても続行できるように、rsyncを使用します。そして、何かが変更された場合は、それらをより速くコピーすることもできます!

RsyncはSSHで動作するため、コピー操作は安全です。

2
Ady Romantika

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
2
Gunstick

scpはジョブを実行しますが、1つのしわがあります。2番目のリモート接続先への接続は、最初のリモート接続先の構成を使用するため、ローカル環境で.ssh/configを使用し、rsaキーとdsaキーが作業するには、エージェントを最初のリモートホストに転送する必要があります。

1
Justin Dossey

さて、簡単な答えは、 'scp'マンページ、またはおそらくrsync-コピーする必要があるものに応じて見てください。必要に応じて、tar-over-sshを実行することもできます。

tar cvf - | ssh server tar xf -
1
zigdon

私はあなたが試すことができると思います:

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ログインが既に設定されている場合、動作します。

1
Ram Prasad

非rootユーザーとして理想的には:

scp -r src $ Host:$ path

すでに$ Hostのコンテンツの一部を使用している場合は、sshでrsyncをトンネルとして使用することを検討してください。

/アラン

0
Allan Wind

正確なコピーが必要な場合は、おそらく-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ソケット上のコピーです。

0
Teddy

通常、上記のscpが最善の方法ですが、リモートディレクトリ仕様のコロンを忘れないでください。そうしないと、ローカルマシン上のソースディレクトリのコピーが取得されます。

0

私は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 [リモートボックスの宛先]

0
Chuck