48

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

4

16 に答える 16

68

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

scp -r sourcedir/ user@dest.com:/dest/dir/

または、より堅牢で高速な(転送速度の観点から)方法:

rsync -auv -e ssh --progress sourcedir/ user@dest.com:/dest/dir/

コマンドの動作の詳細が必要な場合は、各コマンドのマニュアルページをお読みください。

于 2008-09-16T04:40:46.680 に答える
37

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

rsync -avlzp /path/to/sfolder name@remote.server:/path/to/remote/dfolder

次のように:

-a(アーカイブ用)は-rlptgoDを意味するため、上記のlとpは不要です。ハードリンクをコピーする-Hも含めるのが好きです。高価なため、デフォルトでは-aの一部ではありません。だから今私たちはこれを持っています:

rsync -aHvz /path/to/sfolder name@remote.server:/path/to/remote/dfolder

また、末尾のスラッシュにも注意する必要があります。あなたはおそらくしたい

rsync -aHvz /path/to/sfolder/ name@remote.server:/path/to/remote/dfolder

ソース「sfolder」のコンテンツを宛先「dfolder」に表示したい場合。末尾のスラッシュがないと、宛先の「dfolder」に「sfolder」サブディレクトリが作成されます。

于 2008-09-19T19:41:21.487 に答える
9

rsync -avlzp / path / to / folder name@remote.server:/path/to/remote/folder

于 2008-09-16T04:37:10.743 に答える
6
scp -r <directory> <username>@<targethost>:<targetdir>
于 2008-09-16T04:37:33.210 に答える
5

1台のマシンにログインします

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

于 2008-09-16T04:37:34.473 に答える
3

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

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

于 2008-09-16T04:37:18.093 に答える
3

タスクが繰り返される場合は unison を試してください。 http://www.cis.upenn.edu/~bcpierce/unison/

于 2008-09-16T05:18:54.623 に答える
2

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
于 2008-09-17T11:53:05.400 に答える
2

scpまたはrsyncを チェックしてください。man scp man rsync

scp file1 file2 dir3 user@remotehost:path
于 2008-09-16T04:37:11.073 に答える
1

scpはその役割を果たしますが、1つの問題があります。2番目のリモート宛先への接続は最初のリモート宛先の構成を使用するため、ローカル環境で.ssh / configを使用し、rsaおよびdsaキーが作業するには、エージェントを最初のリモートホストに転送する必要があります。

于 2008-09-19T19:18:53.070 に答える
1

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

tar cvf - | ssh server tar xf -
于 2008-09-16T04:37:33.410 に答える
1

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

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ログインをすでにセットアップしている場合は機能します

于 2008-09-16T16:39:12.163 に答える
0

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

scp -r src $ host:$ path

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

/アラン

于 2008-09-16T04:37:50.260 に答える
0

正確なコピーが必要な場合は、-p スイッチを scp に使用することもお勧めします (使用している場合)。私は scpが devices から読み取ることを発見し、 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 経由でコピーするためのものです。他のものは、圧縮されたアーカイブにコピーするため、同じコンピューター内でコピーするため、および SSH が遅すぎる場合に暗号化されていない TCP ソケットを介してコピーするためのものです。

于 2008-09-17T12:19:50.797 に答える
0

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

于 2008-09-17T14:00:05.377 に答える
0

私は ssh を通して tar をパイプするのが好きです。

tar cf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] tar xf - -C [リモート ボックスの宛先]

この方法では、多くのオプションが提供されます。通常のユーザーとしてリモートサーバーにログインしているため、root ssh を無効にして複数のユーザーアカウントのファイルをコピーするのは困難です。これを回避するには、所有権を保持しているリモート ボックスに tar ファイルを作成します。

tar cf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] "cat > output.tar"

接続が遅い場合は、圧縮 (gzip の場合は z、bzip2 の場合は j) を追加できます。

tar cjf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] "cat > output.tar.bz2"

tar czf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] "cat > output.tar.gz"

tar czf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] tar xzf - -C [リモート ボックスの宛先]

于 2008-09-19T14:53:54.330 に答える